定义要在全局范围内运行而不发出警告的宏
Define a macro to be run at global scope without warnings
下面的代码还可以,但由于额外的";"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() { ... }
相关文章:
- 警告处理为错误这里有什么问题
- 为什么在全局范围内使用"extern int a"似乎不行?
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 当vector是tje全局变量时,c++中vector的内存管理
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何创建一个空的全局类并在启动时实例化它
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- cppcheck在const std::string[]上引发警告
- GCC对可能有效的代码抛出init list生存期警告
- 如何在BST的这个简单递归实现中消除警告
- 内联函数中具有内部链接的全局变量
- 关于std::move的使用,是否有编译警告
- g++ 在某个类成员未初始化时不发出警告
- 为什么虚函数不能是静态的和全局的?
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- 未显式初始化C++全局变量时发出警告?
- 如何处理警告 C4177:#pragma 'float_control' 只能在全局范围或命名空间范围内使用
- 定义要在全局范围内运行而不发出警告的宏
- clang中如何处理全局构造函数警告