0
我有這個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
這在foo()
x
的低8位。所以,這是有道理的。但我的問題是:爲什麼這不會產生警告,並且有沒有辦法讓我爲這種類型的錯誤產生警告?
使用'-Wconversion'編譯,你會注意到一個警告 –
@AlterMann謝謝你。我想知道爲什麼在使用-'pedantic''-Wall'' -Wextra'時沒有觸發。 – jdarthenay
char是C中的一個小整數。除非您使用-Wconversion標誌,否則不會出現任何錯誤,如@AlterMann所述。 –