【发布时间】: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);是可以的,但对于它的实现则不行,因为代码不能使用没有标识符的参数。这不是警告,而是错误。
标签: c++ c gcc compiler-warnings