我的代码库有一个头文件,其中包含这一点预处理器魔力:
#ifdef ENABLE_DEBUG_OBJECTS
# define DECLARE_DEBUG_OBJECT(v) DebugObject obj(v)
#else
# define DECLARE_DEBUG_OBJECT(v)
#endif
我的想法是,在其他头文件的不同类中,我可以这样做:
class MyClass
{
public:
MyClass() {}
private:
DECLARE_DEBUG_OBJECT(123);
};
…如果我已经定义了
-DENABLE_DEBUG_OBJECTS
在我的档案里,然后
MyClass
会有一个
DebugObject
它是一个私有成员变量,如果我没有,它就不会。
这很好,除了一个小麻烦——如果我用clang的编译代码
-Wpedantic
标志,不带
-可变性调试对象
现在,我收到了很多关于“多余”分号的警告
private:
章节:
$ clang++ -Wpedantic ./test.cpp
./test.cpp:14:29: warning: extra ';' inside a class [-Wextra-semi]
DECLARE_DEBUG_OBJECT(123);
现在,避免这种情况的两个明显方法是禁用多余的分号警告,或者将分号放在define行中,而不是将其单独放在private:section中。
类名
.
但是,我觉得自己很顽固,所以我更喜欢把分号分开(只是出于美观的原因),我也希望能够
-wpedantic公司
没有看到这个错误就会到处出现。
所以我的问题是:是否有一些no-op标记可以放在上面的非启用调试对象分支中?
#ifdef
这会说服clang++不要抱怨分号,但对于编译器来说,这不是一个“不操作”?