]> granicus.if.org Git - icu/commit
ICU-20601 Wrap public ICU API compound macros in do { } while.
authorFredrik Roubert <roubert@google.com>
Wed, 22 May 2019 20:16:39 +0000 (13:16 -0700)
committerFredrik Roubert <fredrik@roubert.name>
Thu, 15 Aug 2019 17:17:25 +0000 (19:17 +0200)
commit480bec3ea652886f46d4afad0d7446542d2fbf05
tree40a5d4ee1a7dbf922ee4517670e33ccfa0074e44
parentd8f14e22df79f3eaf72218118ae1274b0b7cbf47
ICU-20601 Wrap public ICU API compound macros in do { } while.

This is the normal way of making compound macros behave like statements
and allowing macro invocations that look like function calls to work
just like if they were function calls.

Before ICU 65, function-like, multi-statement ICU macros were just
defined as series of statements wrapped in { } blocks and the caller
could choose to either treat them as if they were actual functions and
end the invocation with a trailing ; creating an empty statement after
the block or else omit this trailing ; using the knowledge that the
macro would expand to { }.

To continue supporting code that depends on that old behaviour, on being
able to omit the trailing ; when invoking one of these macros, the new
surrounding do { } while is done through preprocessor defines that can
easily be overridden at compile time, when needed.
icu4c/source/common/unicode/ucptrie.h
icu4c/source/common/unicode/umachine.h
icu4c/source/common/unicode/utext.h
icu4c/source/common/unicode/utf16.h
icu4c/source/common/unicode/utf8.h
icu4c/source/common/unicode/utf_old.h