1

次のコードは問題ありませんが、余分な ';' が原因で警告が表示されます。INITの後。

#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() { }

コリルの例はこちら

于 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 に答える