Was bedeutet __GNUC__?

Persönliche Seite #4859404
Lesenswert?
• ▲
▼
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
#4861089
Lesenswert?
• ▲
▼
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
Persönliche Seite #4861183
Lesenswert?
• ▲
▼
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 :-)
Persönliche Seite #4861262
Lesenswert?
• ▲
▼
Beispiel:
1
avr-gcc foo.c -S -std=c89 -ansi -pedantic -W -Wall -Wextra
  
mit folgendem C-Programm:
1
#if defined __GNUC__ && defined __STRICT_ANSI__
2
__extension__
3
#warning GCC in Strict ANSI Mode.
4

5
__extension__ extern long long i;
6

7
__extension__ struct a { struct { int q; int w[0]; }; } a = { .q = 0 } ;
8

9
__inline__ __attribute__((__used__,__section__(".text.func")))
10
void func (void)
11
{
12
    register int a __asm__("30");
13
    __asm __volatile__ ("nop" : "=r" (a) :: "10");
14
    __builtin_avr_cli ();
15
}
16
#endif
 
Die einzige Diagnostic ist die angeforderte:
  
1
foo.c:3:2: warning: #warning GCC in Strict ANSI Mode. [-Wcpp]
2
 #warning GCC in Strict ANSI Mode.
3
  ^~~~~~~
 
Und zeug wie Inline-ASM und Section-Zuweisung werden nicht nur 
akzeptiert sondern auch wie erwartet compiliert.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.