gpt4 book ai didi

c++ - #ifdef 宏 vs -Wpedantic 和 "extra"分号

转载 作者:搜寻专家 更新时间:2023-10-31 02:06:19 26 4
gpt4 key购买 nike

我的代码库有一个头文件,其中包含这个预处理器魔法:

#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);
};

... 如果我在我的 Makefile 中定义了 -DENABLE_DEBUG_OBJECTS,那么 MyClass 将有一个 DebugObject 作为私有(private)成员变量,或者如果我没有,它就不会。

这工作正常,除了一个小烦恼——如果我用 clang 的 -Wpedantic 标志编译我的代码,并且没有 -DENABLE_DEBUG_OBJECTS 存在,我会收到很多警告关于 private: 部分中的“额外”分号:

$ clang++ -Wpedantic ./test.cpp
./test.cpp:14:29: warning: extra ';' inside a class [-Wextra-semi]
DECLARE_DEBUG_OBJECT(123);

现在有两种明显的避免这种情况的方法是禁用额外的分号警告,或者将分号放入#define 行而不是将其分开放在 MyClass 的 private: 部分>.

但是,我觉得很固执,所以我更愿意将分号分开(只是出于美观原因),而且我还希望能够启用 -Wpedantic 而不是到处都看到这个错误。

所以我的问题是:是否有一些 no-op 标记我可以放入上面 #ifdef 的非 ENABLE_DEBUG_OBJECTS 分支中,这将说服 clang++ 不要提示分号,否则就编译器而言是空操作吗?

最佳答案

一个微不足道的静态断言 (static_assert(true, "");) 目前没有被 Clang 警告选中。然而,这可能会随着 future 的版本而改变。

关于c++ - #ifdef 宏 vs -Wpedantic 和 "extra"分号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50479086/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com