関数の外で cpp マクロの後にセミコロンを強制するイディオムはありますか?
関数内で使用されるマクロの既知の解決策は次のとおりです。
#define MACRO(x) \
do {
x * 2;
} while(0)
ただし、次のようなマクロがあるとします。
#define DETAIL(warning) _Pragma(#warning)
#define WARNING_DISABLE(warning) DETAIL(GCC diagnostic ignore warning)
そのステートメントの後にセミコロンを強制するマクロに何を入れることができますか? このステートメントは、関数の内外で使用できます。
WARNING_DISABLE("-Wunused-local-typedefs")
#include "boost/filesystem.hpp"
void foo(const int x) {
WARNING_DISABLE("-Wsome-warning")
...
}
副作用のないファイル内の任意のポイントでパーサーにセミコロンを強制する C/C++ 構文はありますか?
編集:可能なユースケース:
#define MY_CPPUNIT_TEST_SUITE(test_suite_class) \
WARNING_PUSH \
/* the declaration of the copy assignment operator has been suppressed */ \
INTEL_WARNING_DISABLE(2268) \
/* the declaration of the copy assignment operator has been suppressed */ \
INTEL_WARNING_DISABLE(2270) \
/* the declaration of the copy constructor operator has been suppressed */ \
INTEL_WARNING_DISABLE(2273) \
CPPUNIT_TEST_SUITE(test_suite_class); \
WARNING_POP \
/* force a semi-colon */ \
UDP_KEYSTONE_DLL_LOCAL struct __udp_keystone_cppunit_test_suite ## __LINE__ {}