Hallo zusammen,
was bedeutet folgender Code?
#if _GNUC_
sei();
#else
_SEI();
#endif
Gast
#4858737
Ok, danke. Aber was ist _GNUC_?
Gast
#4858754
Thomas H. schrieb: > Aber was ist GNUC? https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html
Das ist ein Makro, das vom GNU-Compiler definiert wird. Die C-Compiler von Microsoft oder IBM haben das nicht definiert.
Wenn ich weiß welchen Compiler ich habe, ist die #IF-Bedingung doch nicht nötig oder?
Gast
#4858767
Thomas H. schrieb: > Wenn ich weiß welchen Compiler ich habe, ist die #IF-Bedingung doch > nicht nötig oder? und was ist wenn der code mit mehre Compiler funktionieren soll?
Aber wenn ich mich 100%ig auf einen Compiler beschränken will, z.B., wenn ich mit dem Atmel Studio 7 das Programm compiliere, ist die Abfrage auf den Compiler nicht nötig.
Gast
#4858773
Thomas H. schrieb: > Aber wenn ich mich 100%ig auf einen Compiler beschränken will Thomas H. schrieb: > Aber wenn ich mich 100%ig auf einen Compiler beschränken will, z.B., > wenn ich mit dem Atmel Studio 7 das Programm compiliere, ist die Abfrage > auf den Compiler nicht nötig. ja
Alles klar, vielen Dank.
Dirk B. schrieb: > Das ist ein Makro, das vom GNU-Compiler definiert wird. > > Die C-Compiler von Microsoft oder IBM haben das nicht definiert. m.W. setzt LLVM das Makro auch.
Thomas H. schrieb: > Aber wenn ich mich 100%ig auf einen Compiler beschränken will, z.B., > wenn ich mit dem Atmel Studio 7 das Programm compiliere, ist die Abfrage > auf den Compiler nicht nötig. Tja, und wenn Atmel Studio 8 einen anderen Compiler benutzt? Echt jetzt: an dieser Stelle ein paar Zeichen zu sparen, ist dumm, ignorant, oder beides.
Gast
#4858944
Sheeva P. schrieb: > Echt jetzt: > an dieser Stelle ein paar Zeichen zu sparen, ist dumm, ignorant, oder > beides. Oder man ist Anfänger. Aber das kann auch in einem der genanten Attribute enthalten sein ....
Gast
#4858948
Johann L. schrieb: > Dirk B. schrieb: >> Das ist ein Makro, das vom GNU-Compiler definiert wird. > > m.W. setzt LLVM das Makro auch. Ja, weil es nicht den GCC anzeigt, sondern die Verfügbarkeit der GCC-Extensions.
Nop schrieb: > Johann L. schrieb: >> Dirk B. schrieb: >>> Das ist ein Makro, das vom GNU-Compiler definiert wird. >> >> m.W. setzt LLVM das Makro auch. > > Ja, weil es nicht den GCC anzeigt, sondern die Verfügbarkeit der > GCC-Extensions. Nö, weil GCC _GNUC_ auch dann setzt, wenn nicht GNU-C übersetzt wird sondern strict nach ISO, z.B. --std=c99 -pedantic
Gast
#4859441
Johann L. schrieb: > Nö, weil GCC GNUC auch dann setzt, wenn nicht GNU-C übersetzt wird > sondern strict nach ISO, z.B. --std=c99 -pedantic Womit fragt man dann die Verfügbarkeit von GCC-Erweiterungen ab?
Nop schrieb: > Johann L. schrieb: >> Nö, weil GCC GNUC auch dann setzt, wenn nicht GNU-C übersetzt wird >> sondern strict nach ISO, z.B. --std=c99 -pedantic > > Womit fragt man dann die Verfügbarkeit von GCC-Erweiterungen ab? Wenn _STRICT_ANSI_ definiert ist, sind die Erweiterungen ausgeschaltet: https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html#Common-Predefined-Macros
Rolf M. schrieb: > Nop schrieb: >> Johann L. schrieb: >>> Nö, weil GCC __GNUC__ auch dann setzt, wenn nicht GNU-C übersetzt wird >>> sondern strict nach ISO, z.B. --std=c99 -pedantic >> >> Womit fragt man dann die Verfügbarkeit von GCC-Erweiterungen ab? > > Wenn __STRICT_ANSI__ definiert ist, sind die Erweiterungen > ausgeschaltet: > https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html#Common-Predefined-Macros Auch das stimmt nicht. Nochmal lesen :-)
Beispiel:
1 | |
mit folgendem C-Programm:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
Die einzige Diagnostic ist die angeforderte:
1 | |
2 | |
3 | |
Und zeug wie Inline-ASM und Section-Zuweisung werden nicht nur akzeptiert sondern auch wie erwartet compiliert.
Gast
#4861418
Johann L. schrieb: > Die einzige Diagnostic ist die angeforderte: Wow, danke. P.S.: Der Assemblercode gefällt mir. ^^
Gast
#4861438
Johann L. schrieb: > Und zeug wie Inline-ASM und Section-Zuweisung werden nicht nur > akzeptiert sondern auch wie erwartet compiliert. Alles, was mit doppelten Underscores oder mit Underscore-Großbuchstabe beginnt gehört zur Implementation und ist auch ANSI-compliant.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.