- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我的代码库有一个头文件,其中包含这个预处理器魔法:
#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/
如果我使用 GCC 编译我的 C 或 C++ 代码,使用 -std=c99 或 -std=c++11 或其他一些适当的 ISO 标准而不是GNU 扩展 - -Wpedantic 会发出比我通常会收到的
当我使用“__FUNCTION__”预定义宏(在 gcc 和 clang 中)输入函数时,我正在打印(printf)函数的名称。但是,如果我使用 -Wpedantic,我会收到此警告: warning
我的代码库有一个头文件,其中包含这个预处理器魔法: #ifdef ENABLE_DEBUG_OBJECTS # define DECLARE_DEBUG_OBJECT(v) DebugObject o
我正在合作一个开源项目,其中全局编译器设置包括 -Werror 和 -pedantic,所以为了让我的贡献被接受,我将遵守这些规定。 其次,我是一个 Windows 用户,所以我很高兴地为这个项目构建
我正在尝试构建 sysrepo 库 https://github.com/sysrepo/sysrepo作为对 travis ci 的依赖,我遇到了位域问题。当我在 14.04 或 16.04 的 u
我想保留任何其他检查 -Wpedantic 但丢失了关于未命名结构的警告 error: ISO C++ prohibits anonymous structs [-Wpedantic]。 我希望能够做
我是一名优秀的程序员,十分优秀!