使用 gcc 11.4.0 和 -Werror=traditional-conversion 编译此 C 程序会引发错误:
short int f(short int x);
short int f(short int x) {
return x;
}
int main(void)
{
short int a = 0;
f(a);
return 0;
}
error: passing argument 1 of ‘f’ with different width due to prototype
假设我无法更改函数的签名,因为它来自库,有没有办法更改调用代码以使错误消失?
我确实为
a
变量尝试了几种整数类型,但没有成功。我不希望出现错误,因为变量和函数的参数原型类型是相同的(短整型)。在我看来,这像是一个误报,但它可能与一些隐含的默认促销有关。我宁愿找到一个不会让我删除这个编译标志的解决方案。
如果您别无选择,只能使用此标志进行编译,您可以使用编译指示禁用它几行:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wtraditional-conversion"
f(a);
#pragma GCC diagnostic pop