Ich habe dieses C
Programm.Kein Kompilierfehler, wenn die Funktion eine Variable vom falschen Typ zurückgibt
#include <stdio.h>
unsigned char foo()
{
int x = 1000;
return x;
}
int main(int argc, char *argv[])
{
printf("foo returns %d\n", foo());
}
Ich verwende die folgenden es zu kompilieren:
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
Es erzeugt die folgende Ausgabe:
$ t
foo returns 232
Das sind die unteren 8 Bits von x
in foo()
ist. Also macht es Sinn. Aber meine Frage ist: Warum hat dies keine Warnung erzeugt und gibt es eine Möglichkeit für mich, Warnungen für diese Art von Fehlern zu generieren?
Kompilieren Sie mit '-Wconversion' und Sie werden eine Warnung bemerken –
@ AlterMann Danke Mann. Ich frage mich, warum nicht ausgelöst wird, wenn beide "pedantische" -Wall "-Wextra" verwenden. – jdarthenay
Ein Zeichen ist eine kleine Ganzzahl in C. Sie erhalten keinen Fehler, wenn Sie das -Wconversion-Flag nicht wie @AlterMann sagt verwenden. –