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

Force a C compiler to produce integer narrowing warning

让我们考虑以下示例:

#include <stdio.h>

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

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

据我所知,没有办法 我可以强制 gccclang 在语句 [=14= 上显示警告] 关于将在那里发生的缩小 int -> unsigned char。甚至用 -Wall -Wextra -pedantic 编译也不行。该问题主要针对 C 代码,但也值得在讨论中包括 C++ 世界(参见下面的注释)。

C++ 注释

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

的解决方法
func({val});

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

问题 1

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

问题 2(回退)

如果事实证明(正如所怀疑的那样)不存在这样的解决方案,我会非常想知道为什么。我不敢相信这样的选择从未被考虑过实施。应该有一份反对它的合理论据清单,我只是想不出。但问题是该选项可能只是非标准的,例如 -fwrapv,人们只能在真正需要的地方使用它。

-Wconversion 是您要查找的内容吗?

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