我有这个C
计划。
#include <stdio.h>
unsigned char foo()
{
int x = 1000;
return x;
}
int main(int argc, char *argv[])
{
printf("foo returns %d\n", foo());
}
我正在使用以下代码进行编译:
gcc -c -g -o ../tgt/Linux/main.c.o -Wall -fpic main.c
gcc ../tgt/Linux/main.c.o -g -o ../tgt/Linux/t -Wall
它会生成以下输出:
$ t
foo returns 232
这是x
中foo()
的低8位。所以,这是有道理的。但我的问题是:为什么这不会产生警告,是否有办法让我为这类错误产生警告?
答案 0 :(得分:2)
在你提到的评论中:
我想知道为什么在使用-pedantic -Wall时都没有触发 -Wextra。
-Wall
未启用-Wconversion
标记[1]。
-Wpedantic
和-pedantic
都不会抓住
return x; // This is valid as per strict ISO C
实际上-pedantic
只会检查任何GNU C扩展[2]。
例如,如果你编译下面的东西:
int a=10;
int b[a]; // This is invalid as per strict ISO C
-pedantic
,gcc会给你:
warning: ISO C90 forbids variable length array ‘b’ [-Wvla]
因此唯一的选择是在编译时明确使用-Wconversion
。
gcc -Wconversion main.c -o main