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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren