gpt4 book ai didi

c++ - 在函数外吞下分号的宏

转载 作者:可可西里 更新时间:2023-11-01 15:49:09 26 4
gpt4 key购买 nike

是否有任何习惯用法在函数外的 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__ {}

最佳答案

你不需要 LINE 技巧 - 前向声明一些结构就足够了,允许多次并且不需要实际定义。与实际结构的冲突也应该不是问题。

#define DETAIL(warning) _Pragma(#warning) struct dummy

关于c++ - 在函数外吞下分号的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18786848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com