【发布时间】:2019-01-18 16:40:05
【问题描述】:
让我们考虑以下示例:
#include <stdio.h>
void func(unsigned char c) {
printf("0x%x\n", c);
}
int main() {
int val = 0x11223344;
func(val);
}
据我所知,没有办法我可以强制 gcc 或 clang 在声明 func(val) 上显示关于缩小 int -> @987654326 的警告@那将在那里发生。甚至使用-Wall -Wextra -pedantic 编译也不行。该问题主要针对C 代码,但也值得将C++ 世界包括在讨论中(请参阅下面的注释)。
C++ 笔记
我很清楚在C++ 中存在一种使用统一初始化语法的解决方法:
func({val});
但这并没有解决我的问题,因为:
- 对于预先存在的代码,它需要更改
- 对于新代码,需要在任何地方使用
{}
问题 1
在编译C 或C++ 代码时,是否有任何神秘的选项可以实现这一点?我也可以使用非标准解决方案,只要它适用于 gcc 或 clang 并且它确实不需要更改代码。 注意:我不是在寻找棘手的C++ 解决方案,它使用带有或不带有包装原始类型的宏的自定义整数类型。我正在寻找类似命令行选项或pragma 的东西。同样,问题主要针对C 代码,但也值得探索任何C++ 解决方案。
问题 2(后备)
如果事实证明(怀疑)不存在这样的解决方案,我会非常好奇为什么要理解。我不敢相信这样的选择从未考虑过实施。应该有一个反对它的合理论据的清单,我只是想不出。但问题是该选项可能只是像-fwrapv 这样的非标准选项,人们只能在真正需要的地方使用它。
【问题讨论】:
-
对于任何版本的 C/C++,规范中是否有任何必需的警告?我认为这取决于供应商的实现,因此对于语言和编译器来说非常具体。
标签: c compiler-warnings