'noreturn' kehrt zurück

7

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%     
user2073729 12.04.2013, 06:05
quelle

2 Antworten

24

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 :

%Vor%

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:

%Vor%

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.

    
NPE 12.04.2013 06:13
quelle
4

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?

    
user529758 12.04.2013 06:15
quelle