1

以下代码是可以的,但由于额外的';'我收到警告 在初始化之后。

#define INIT \
    namespace Vars { \
      int a = 0; \
    }

INIT;

int main() { ... }

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

考虑到 INIT 必须在全局范围内是可调用的。

4

2 回答 2

2

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

Coliru 示例在这里

于 2015-11-01T02:28:42.520 回答
0

这个解决方案似乎是合理的:

#define INIT \
    namespace Vars { \
      int a = 0; \
    } int INIT_ = 0

INIT;

int main() { ... }
于 2016-01-08T11:50:50.920 回答