Wenn ich das unten stehende C-Programm kompiliere, erhalte ich folgende Warnung: %Code%. Dies ist die Funktion:
%Vor% Warum könnte es passieren?
Der Aufruf dieser Funktion ist ‘noreturn’ function does return
BEARBEITEN: Die vollständige Fehlerausgabe:
%Vor% Es ist möglich, gcc
mitzuteilen, dass eine bestimmte Funktion niemals zurückkehrt. Dies ermöglicht bestimmte Optimierungen und vermeidet falsche Warnungen vor nicht initialisierten Variablen.
Dies geschieht mit dem noreturn
Attribut :
Wenn die Funktion trotz des noreturn
-Attributs zurückkehrt, gibt der Compiler die Warnung aus, die Sie sehen (was in Ihrem Fall in einen Fehler umgewandelt wird).
Da Sie in Ihrem Code wahrscheinlich nicht noreturn
verwenden, ist die wahrscheinlichste Erklärung, dass Sie eine Funktion haben, deren Name mit einer standardmäßigen noreturn
-Funktion kollidiert, wie im folgenden Beispiel:
Hier kollidiert mein exit
mit exit(3)
.
Ein weiterer offensichtlicher Kandidat für einen solchen Konflikt ist abort(3)
.
Natürlich, wenn Ihre Funktion tatsächlich hello()
heißt, ist der Täter fast sicher irgendwo in Ihrer Codebasis.
Höchstwahrscheinlich ist die Funktion mit __attribute__((noreturn))
gekennzeichnet. Tatsächlich kehrt es jedoch zurück (wenn die Steuerung das Ende von irs body erreicht, da sie nicht in eine Endlosschleife eintritt, ruft sie keine anderen "noreturn" -Funktionen usw. auf.)
Ich sehe nicht, was Ihr Punkt in 1. ist, die Funktion als nicht zurückkehrend, 2. eine Funktion schreibend, die nichts tut - wahrscheinlich könnten Sie beide einfach eliminieren?
Tags und Links c gcc compiler-errors compiler-warnings warnings