如何使 gcc 警告缩小函数参数

Posted

技术标签:

【中文标题】如何使 gcc 警告缩小函数参数【英文标题】:How to make gcc warn about narrowing function parameters 【发布时间】:2018-01-05 19:31:11 【问题描述】:

下面的程序涉及一个隐式缩小的函数参数。信息可能会丢失。

void func(short) 

int main()

    int i = 0x7fffffff;
    func(i);

如果我使用-Wall -Wextra 使用 gcc 编译这个程序(C 或 C++),我会收到没有警告

当然,这种行为通常会被认为是不可取的。

当这些缩小转换发生时,是否有一些 gcc 命令行参数会触发诊断消息?

【问题讨论】:

选项:-Wconversion 将允许编译器输出有关此类问题的警告消息。 我只是担心编译器可能会将0xffffffff 解释为-1,并以某种方式意识到该值适合短。这是一个远射。 这个问题是关于gcc,而不是关于C++(这是一种不同的语言)所以请删除c++标签 MSVC 对象为其他对象:错误 C2055:预期的形式参数列表,而不是类型列表。这对于函数 prototype void func(short); 是可以的,但对于它的实现则不行,因为代码不能使用没有标识符的参数。这不是警告,而是错误。 【参考方案1】:

对 gcc/clang 使用 -Wconversion/W4 可用于 VC++。

online compiler

【讨论】:

注意there is also a -Wconversion wiki

以上是关于如何使 gcc 警告缩小函数参数的主要内容,如果未能解决你的问题,请参考以下文章

如何在 eax 和 esi 中调用带有参数的函数。 GCC C++

初始化复杂结构,GCC 警告:已覆盖副作用的初始化字段

gcc 警告“在 GCC 7.1 中为 X 传递的项目参数已更改”是啥意思?

如何在 Qt Creator 中启用自定义 gcc 参数? [复制]

是否可以在不详尽检查函数体中的每个参数的情况下缩小重载参数的类型?

gcc和g++常用编译参数