让我们考虑以下示例:
#include <stdio.h>
void func(unsigned char c) {
printf("0x%x\n", c);
}
int main() {
int val = 0x11223344;
func(val);
}
据我所知,没有办法,我无法强制gcc
或clang
在声明func(val)
上显示有关缩小{ {1}}-> int
将会在那里发生。甚至不使用unsigned char
进行编译。该问题主要针对-Wall -Wextra -pedantic
代码,但值得在讨论中包括C
世界(请参阅下面的注释)。
我很清楚C++
中存在一种使用统一初始化语法的解决方法:
C++
但这不能解决我的问题,因为:
func({val});
在编译{}
或C
代码时,是否有任何奥秘的选择来实现?我也可以使用非标准解决方案,只要它可以与C++
或gcc
一起使用并且不需要要求更改代码即可。 注意:我不是在寻找使用带有或不带有包装原始类型的宏的自定义整数类型的棘手的clang
解决方案。我正在寻找类似命令行选项或C++
之类的东西。同样,问题主要是针对pragma
代码,但也值得探索任何C
解决方案。
如果事实证明是(疑似)不存在这样的解决方案,那么我很想知道为什么。我不敢相信从来没有考虑过实施这种选择。应该有一个反对它的合理论据,我只是想不到。但事实是,该选项可能像C++
那样是非标准的,人们只能在真正需要它的地方使用它。