定义要在全局范围内运行而不发出警告的宏

Define a macro to be run at global scope without warnings

本文关键字:警告 全局 范围内 运行 定义      更新时间:2023-10-16

下面的代码还可以,但由于额外的";"INIT之后。

#define INIT 
    namespace Vars { 
      int a = 0; 
    }
INIT;
int main() { ... }

如何修复此代码,允许使用额外的";"表示法?

请考虑INIT必须在全局范围内可调用。

如果真的想要强制使用分号,一种可能的解决方法是用"唯一"名称定义一个未使用的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() { ... }