Was ist der __STDC_VERSION__-Wert für C11?

Lesezeit: 3 Minuten

Benutzer-Avatar
paxdiablo

Ich weiß, dass Compiler verwenden __STDC__ um anzuzeigen, dass es sich bei einem Compiler um Standard-C handelt und Sie von dort aus verwenden können __STDC_VERSION__ herauszufinden, welche eben des Standards, den Sie verwenden.

Ich weiß auch, dass C90 keinen Wert hatte, C90-Änderung 1 hatte 199401L und C99 hatte 199901L.

Der neueste C1x-Entwurf, den ich habe, sagt es einfach so 201ymmL und ich gehe davon aus, dass es im endgültigen Standard zu einem weniger “vage” Wert gemacht wurde.

Meine Vermutung ist, dass es so sein wird 201112L Seitdem wurde C11 ratifiziert, aber ich möchte sicher sein.

Ich dachte, ich könnte versuchen, es zu verwenden gcc -std=c1x aber die Version von gcc Ich laufe unterstützt das noch nicht.

Weiß jemand wie hoch der tatsächliche Wert ist?

  • Auf jeden Fall ist die Nummerierung der C-Versionen so grob, dass Sie einfach testen können > 201100L.

    – Jens Gustedt

    15. Februar 2012 um 14:14 Uhr

  • Duplikat: Was ist C11 cor 1:2012?.

    – Ludin

    27. September 2019 um 8:36 Uhr

  • Lundin: habe den Dupe geschlossen.

    – paxdiablo

    27. September 2019 um 9:26 Uhr

  • @paxdiablo Ja gut … weder du noch ich waren dafür geeignet (einen Post als Dupe mit unserem eigenen Post als Ziel zu schließen), da wir parteiisch sind. Der verlinkte ist aber kein Dupe davon, sondern umgekehrt, da der TC andere Dinge enthielt als __STDC_VERSION__ auch.

    – Ludin

    27. September 2019 um 10:27 Uhr


  • Als Nachtrag für alle Suchenden ist der Wert für C17 201710L.

    – Tobi

    31. Dezember 2021 um 17:32 Uhr

Benutzer-Avatar
ouah

Mit -std=c11 in gcc, 201112L wird verwendet für __STDC_VERSION__

Sieh dir das an gcc Patch am 20. Dezember 2011 auf gcc Milliliter:

https://www.mail-archive.com/[email protected]/msg23572.html

Und beachten Sie, dass anscheinend die ISO-Version von C11 vergessen hat, die zu aktualisieren 201ymmL aus dem Entwurf.

Das vorgesehene Finale __STDC_VERSION__ Wert, 201112List ebenfalls implementiert (der Editor hat vergessen, die 201ymmL Platzhalter, bevor das Dokument zur Veröffentlichung durch ISO gesendet wird).

Siehe auch DR Nr. 411was es offiziell macht, dass der beabsichtigte Wert ist 201112l. Das hat die Redaktion gesagt “Das Komitee versucht, es so schnell wie möglich als TC genehmigt zu bekommen.”. (TC = “Technische Berichtigung”)

EDIT (16. Juli 2012): Technische Berichtigung 1 (ISO/IEC 9899:2011/Cor 1:2012) veröffentlicht am 15. Juli 2012 behebt die __STDC_VERSION__ zu 201112L.

  • Welche Version von gcc ist das? Mein Ubuntu 1104 ist 4.5.2 und ich werde vollgestopft sein, wenn ich auf 1110 aktualisiere, da ich gehört habe, dass die scheußliche Unity-Schnittstelle nicht mehr optional ist 🙂

    – paxdiablo

    15. Februar 2012 um 13:32 Uhr


  • Es scheint, dass -std=c11 wurde hinzugefügt gcc 4.7 gcc.gnu.org/gcc-4.7/changes.html

    – au

    15. Februar 2012 um 13:35 Uhr

  • @paxdiablo: Sie können Unity loswerden, aber da der Patch am 20. Dezember eingereicht wurde, war er nicht in Ubuntu 11.10 enthalten.

    – Fred Foo

    15. Februar 2012 um 13:36 Uhr

  • Ich habe die endgültige ISO-Version und kann bestätigen, dass sie vergessen haben, sie zu ändern. Da steht immer noch “201ymmL” wie im Entwurf.

    – Ludin

    15. Februar 2012 um 14:35 Uhr


  • ISO hat gestern, 2012-07-15, ein Korrigendum veröffentlicht Kor 1:2012 für C11: Wert __STDC_VERSION__ steht jetzt fest 201112L iso.org/iso/home/store/catalogue_tc/…

    – au

    16. Juli 2012 um 12:42 Uhr

Entsprechend Dies Post an die GCC-Mailingliste, der letzte Wert ist, wie Sie vermutet haben, 201112L.

1382250cookie-checkWas ist der __STDC_VERSION__-Wert für C11?

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

Privacy policy