强制C编译器产生整数缩小警告

时间:2019-01-18 16:40:05

标签: c compiler-warnings

让我们考虑以下示例:

#include <stdio.h>

void func(unsigned char c) {
   printf("0x%x\n", c);
}

int main() {
   int val = 0x11223344;
   func(val);
}

据我所知,没有办法,我无法强制gccclang在声明func(val)上显示有关缩小{ {1}}-> int将会在那里发生。甚至不使用unsigned char进行编译。该问题主要针对-Wall -Wextra -pedantic代码,但值得在讨论中包括C世界(请参阅下面的注释)。

C ++注意

我很清楚C++中存在一种使用统一初始化语法的解决方法:

C++

但这不能解决我的问题,因为:

  • 对于预先存在的代码,需要进行更改
  • 对于新代码,需要在各处使用func({val});

问题1

在编译{}C代码时,是否有任何奥秘的选择来实现?我也可以使用非标准解决方案,只要它可以与C++gcc一起使用并且不需要要求更改代码即可。 注意:我不是在寻找使用带有或不带有包装原始类型的宏的自定义整数类型的棘手的clang解决方案。我正在寻找类似命令行选项或C++之类的东西。同样,问题主要是针对pragma代码,但也值得探索任何C解决方案。

问题2(后备)

如果事实证明是(疑似)不存在这样的解决方案,那么我很想知道为什么。我不敢相信从来没有考虑过实施这种选择。应该有一个反对它的合理论据,我只是想不到。但事实是,该选项可能像C++那样是非标准的,人们只能在真正需要它的地方使用它。

1 个答案:

答案 0 :(得分:7)

您正在寻找-Wconversion吗?

在很多情况下,您可以看到行为here