次のコードは問題ありませんが、余分な ';' が原因で警告が表示されます。INITの後。
#define INIT \
namespace Vars { \
int a = 0; \
}
INIT;
int main() { ... }
このコードを修正して、余分な「;」を含む表記を許可するにはどうすればよいですか?
INIT はグローバル スコープで呼び出し可能でなければならないことを考慮してください。
次のコードは問題ありませんが、余分な ';' が原因で警告が表示されます。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() { ... }