C++项目中如何仅排除-fvisibility-inlines-hidden相关可见性警告的错误处理?
解决方案
当然有办法实现你的需求——不用放弃体积优化,也不用关闭所有属性警告的错误处理,只需精细控制编译器的警告级别即可。
编译参数调整(推荐全局方案)
在现有编译参数的基础上,调整为以下组合:
-fvisibility-inlines-hidden -Werror=attributes -Wno-error=visibility
原理说明
-fvisibility-inlines-hidden:保留二进制体积优化的收益,这部分完全不变。-Werror=attributes:继续将绝大多数属性相关警告转为错误,满足你保留其他属性检查的要求。-Wno-error=visibility:单独把可见性不匹配相关的警告(就是你遇到的「declared with greater visibility than the type of its field」)从错误列表中排除,这类警告只会正常输出,不会中断编译。
代码级备选方案(精准控制)
如果不想全局调整编译参数,只想针对触发警告的特定代码块处理,可以用编译器诊断指令包裹代码:
#pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wattributes" // 这里放置触发警告的代码片段 #pragma GCC diagnostic pop
这种方式不会影响其他代码的警告检查,但需要修改对应的源码。
内容的提问来源于stack exchange,提问作者zrb
相关产品推荐
相关产品推荐

