带有标志 -Werror=traditional-conversion 的简单短 int 函数调用时出现 gcc 编译错误

问题描述 投票:0回答:1

使用 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
变量尝试了几种整数类型,但没有成功。我不希望出现错误,因为变量和函数的参数原型类型是相同的(短整型)。在我看来,这像是一个误报,但它可能与一些隐含的默认促销有关。我宁愿找到一个不会让我删除这个编译标志的解决方案。

c function gcc implicit-conversion compiler-flags
1个回答
0
投票

如果您别无选择,只能使用此标志进行编译,您可以使用编译指示禁用它几行:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wtraditional-conversion"
    f(a);
#pragma GCC diagnostic pop
© www.soinside.com 2019 - 2024. All rights reserved.