强制 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);
}
据我所知,没有办法 我可以强制 gcc
或 clang
在语句 [=14= 上显示警告] 关于将在那里发生的缩小 int
-> unsigned char
。甚至用 -Wall -Wextra -pedantic
编译也不行。该问题主要针对 C
代码,但也值得在讨论中包括 C++
世界(参见下面的注释)。
C++ 注释
我很清楚 C++
中存在一种使用 统一初始化语法:
的解决方法
func({val});
但这不能解决我的问题,因为:
- 对于预先存在的代码,需要更改
- 对于新代码,需要在所有地方使用
{}
问题 1
在编译 C
或 C++
代码时,是否有任何神秘的选项可以实现这一点?我也可以使用非标准解决方案,只要它适用于 gcc
或 clang
并且 不需要 需要更改代码。 注意: 我不是在寻找棘手的 C++
解决方案,该解决方案使用带有或不带有包装原始类型的宏的自定义整数类型。我正在寻找类似命令行选项或 pragma
的东西。同样,问题主要针对 C
代码,但也值得探索任何 C++
解决方案。
问题 2(回退)
如果事实证明(正如所怀疑的那样)不存在这样的解决方案,我会非常想知道为什么。我不敢相信这样的选择从未被考虑过实施。应该有一份反对它的合理论据清单,我只是想不出。但问题是该选项可能只是非标准的,例如 -fwrapv
,人们只能在真正需要的地方使用它。
-Wconversion
是您要查找的内容吗?
您可以在很多情况下看到行为 here。
让我们考虑以下示例:
#include <stdio.h>
void func(unsigned char c) {
printf("0x%x\n", c);
}
int main() {
int val = 0x11223344;
func(val);
}
据我所知,没有办法 我可以强制 gcc
或 clang
在语句 [=14= 上显示警告] 关于将在那里发生的缩小 int
-> unsigned char
。甚至用 -Wall -Wextra -pedantic
编译也不行。该问题主要针对 C
代码,但也值得在讨论中包括 C++
世界(参见下面的注释)。
C++ 注释
我很清楚 C++
中存在一种使用 统一初始化语法:
func({val});
但这不能解决我的问题,因为:
- 对于预先存在的代码,需要更改
- 对于新代码,需要在所有地方使用
{}
问题 1
在编译 C
或 C++
代码时,是否有任何神秘的选项可以实现这一点?我也可以使用非标准解决方案,只要它适用于 gcc
或 clang
并且 不需要 需要更改代码。 注意: 我不是在寻找棘手的 C++
解决方案,该解决方案使用带有或不带有包装原始类型的宏的自定义整数类型。我正在寻找类似命令行选项或 pragma
的东西。同样,问题主要针对 C
代码,但也值得探索任何 C++
解决方案。
问题 2(回退)
如果事实证明(正如所怀疑的那样)不存在这样的解决方案,我会非常想知道为什么。我不敢相信这样的选择从未被考虑过实施。应该有一份反对它的合理论据清单,我只是想不出。但问题是该选项可能只是非标准的,例如 -fwrapv
,人们只能在真正需要的地方使用它。
-Wconversion
是您要查找的内容吗?
您可以在很多情况下看到行为 here。