将宏定义为 运行 在全局范围内没有警告
Define a macro to be run at global scope without warnings
下面的代码是可以的,但是由于额外的';',我收到了警告初始化后。
#define INIT \
namespace Vars { \
int a = 0; \
}
INIT;
int main() { ... }
如何修复此代码,允许带有额外“;”的符号?
考虑到 INIT 必须在全局范围内可调用。
如果您真的想要强制使用分号,一种可能的解决方法是使用 "unique" 名称定义未使用的 struct
,如下所示:
#define CAT_IMPL(m0, m1) m0##m1
#define CAT(m0, m1) CAT_IMPL(m0, m1)
#define INIT \
namespace Vars { \
\
} \
struct CAT(some_unique_name, __LINE__) \
{ } __attribute__((unused))
INIT;
INIT;
int main() { }
这个解决方案似乎是合理的:
#define INIT \
namespace Vars { \
int a = 0; \
} int INIT_ = 0
INIT;
int main() { ... }
下面的代码是可以的,但是由于额外的';',我收到了警告初始化后。
#define INIT \
namespace Vars { \
int a = 0; \
}
INIT;
int main() { ... }
如何修复此代码,允许带有额外“;”的符号?
考虑到 INIT 必须在全局范围内可调用。
如果您真的想要强制使用分号,一种可能的解决方法是使用 "unique" 名称定义未使用的 struct
,如下所示:
#define CAT_IMPL(m0, m1) m0##m1
#define CAT(m0, m1) CAT_IMPL(m0, m1)
#define INIT \
namespace Vars { \
\
} \
struct CAT(some_unique_name, __LINE__) \
{ } __attribute__((unused))
INIT;
INIT;
int main() { }
这个解决方案似乎是合理的:
#define INIT \
namespace Vars { \
int a = 0; \
} int INIT_ = 0
INIT;
int main() { ... }