Mit gcc
5.2.0, bemerkte ich, dass dieser Code nicht eine Warnung generiert:Keine Warnung, wenn NULL mit gcc
#include <stddef.h>
int function(void)
{
return NULL;
}
void procedure(void)
{
return NULL;
}
ich verwendet, um die Fahnen -Wall -Wextra -std=c99 -pedantic
und ich bin mit archlinux. Ich bin nicht sicher, warum dieser Code auf gcc
gut funktioniert, besonders seit clang
3.7.0 erzeugt eine Warnung.
Ich habe auch versucht mit älteren Versionen von gcc
wie 4.9 oder 4.7 und sie beide generieren Warnungen.
Die Warnungen sind:
warning: return makes integer from pointer without a cast
und
warning: ‘return’ with a value, in function returning void
Ich sollte erwähnen, dass ich gcc 5.2 auf Debian kompilieren versucht, und das Ergebnis ist das gleiche. Also scheint Archlinux nicht das Problem zu sein.
Was ist der Grund? Ich kann nirgendwo anders etwas finden, was damit zusammenhängt.
Vielen Dank!
möglich duplizieren http://stackoverflow.com/questions/1610030/why-can-you-return-from-a-non-void-function-without-returning-a-value-without-pr –
Lol du meinst "invers duplizieren"? Mit dieser Frage wird gefragt, warum Sie einen Wert in einem Rumpf einer Void-Funktion zurückgeben können. Das "Duplikat" fragt, warum Sie einen Körper einer nicht-void-Funktion ohne eine return-Anweisung schreiben können. – BitTickler
mögliches Duplikat von [Warum gibt 0x80000000 von einer Funktion, die int32 \ _t zurückgibt, keine Warnung zurück?] (Http://stackoverflow.com/questions/32656460/why-doesn-returning-0x80000000-from-a-function -that-returns-int32-t-cause-a-wa) –