Semikolon am Ende von if-Anweisungen und Funktionen in C

Lesezeit: 3 Minuten

Benutzer-Avatar
Codierbär

Ich bin gerade auf Code gestoßen, der Semikolons überbeansprucht oder Semikolons für andere Zwecke verwendet, die mir nicht bekannt sind.

Ich habe Semikolons am Ende von if-Anweisungen und am Ende von Funktionen gefunden. Zum Beispiel:

int main (int argc, char * argv[]) {
    // some code

    if (x == NULL) {
        // some code
    };  <-----

    // more code

    return 0;
}; <---

Es wird mit cc kompiliert, nicht mit gcc. Was machen diese Semikolons? Ich gehe davon aus, dass es keinen Unterschied gibt, weil der Compiler es nur als leere Anweisung betrachten würde.

  • Das Semikolon nach dem Ende der Funktion ist schlichtweg falsch. Wenn ‘cc’ es akzeptiert, muss es es als eine Art leere globale Erklärung behandeln – aber es ist schlichtweg falsch. Das andere Semikolon wurde gut erklärt.

    – Jonathan Leffler

    11. Mai 2009 um 6:51 Uhr

  • ‘gcc’ warnt vor dem Semikolon am Ende, wenn Sie das Flag ‘-pedantic’ verwenden. ‘cc’ hängt von Ihrer Plattform ab, aber es ist oft nur ein weicher Link zu ‘gcc’, also sollten Sie es vielleicht ausprobieren oder sich ‘man cc’ ansehen.

    – Daniel James

    11. Mai 2009 um 7:08 Uhr

Die machen nichts. Sie sind ein Zeichen dafür, dass jemand die Sprache nicht besonders gut versteht, vermute ich.

Wenn dies der Quellcode ist, den Sie fiktiv “besitzen”, würde ich den Code entfernen und versuchen, ein sanftes Gespräch mit der Person zu führen, die ihn geschrieben hat.

  • Wir haben das vor vielen Jahren ziemlich oft gesehen, als wir ein Team von Programmierern hatten, die von Turbo Pascal zu C wechselten. Doppelpunkt mit ihnen. Sobald sich die Gewohnheit gebildet hat, bleibt sie haften.

    – SmacL

    11. Mai 2009 um 6:57 Uhr

Benutzer-Avatar
Francis

das ist Dummy-Statement. Ihre Probe ist identisch mit

if (x == NULL) {
 // some code
 do_something_here();
}

/* empty (dummy statement) here */ ;

// more code
some_other_code_here();

  • Sie haben ein besseres Beispiel gegeben, als Sie dachten. “// irgendein Code” sollte “// hier leer” sein, weil es leer ist und weil 0 Dummy-Anweisungen genauso gültig sind wie 1 Dummy-Anweisung.

    – Windows-Programmierer

    11. Mai 2009 um 6:05 Uhr

  • Ich folge seinem Beispiel, deshalb gibt es “some code” – er muss etwas in seinem echten Code haben.

    – Francis

    11. Mai 2009 um 6:25 Uhr

Sie haben Recht, der Compiler betrachtet sie als leere Anweisungen. Sie werden nicht benötigt, ich denke, der Programmierer dachte irgendwie, dass sie es wären.

Das erste Semikolon (nach der if-Anweisung) ist nur ein leerer Ausdruck, der nichts tut. Ich sehe keinen Sinn darin, es dort zu haben.

Das zweite Semikolon (nach der Funktion) ist ein Fehler, da es sich außerhalb eines Codeblocks befindet. Der Compiler sollte eine Warnung ausgeben.

Diese Semikolons werden nicht benötigt (wie Sie sagten, es handelt sich um leere Anweisungen). Ihr Code wird mit gcc kompiliert, vorausgesetzt, dass „x“ definiert ist (check http://www.codepad.org). Es gibt keinen Grund, warum ein C-Compiler sich weigern sollte, Ihren Code zu kompilieren.

Benutzer-Avatar
Dana die Vernünftige

Ich denke, dass der Autor vielleicht etwas wie Folgendes angestrebt hat:

if(condition for tbd block)
    ;
else {
    //Some code here
}

was Sie tun könnten, wenn Sie Code gerüsten und trotzdem kompilieren möchten. Es besteht eine gute Chance, dass es sich nur um einen Fehler handelt, wie Jon vorschlägt.

Benutzer-Avatar
Aamir

Diese Semikolons sind nutzlos, wie andere bereits darauf hingewiesen haben. Das einzige, was ich hinzufügen möchte, ist, dass diese meiner Meinung nach sowieso optimiert sind, dh der Compiler generiert keinen echten Code dafür.

1283980cookie-checkSemikolon am Ende von if-Anweisungen und Funktionen in C

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy