Vraag Wat is het verschil tussen GNU99 en C99 (Clang)?


Ik heb de compileroptie GNU99 en C99 gezien. Wat is het verschil van hen? Eventuele detaildocumentatie? (Clang, Xcode, Mac OS X)


51
2018-03-15 14:52


oorsprong


antwoorden:


Verschillen tussen verschillende standaardmodi

clang ondersteunt de -std optie, die verandert welke taalmodus clang gebruikt. De ondersteunde modi voor C zijn c89, gnu89, c94, c99, gnu99 en verschillende aliassen voor die modi. Als er geen -std-optie is opgegeven, clang standaard naar gnu99-modus.

Verschillen tussen alle c * - en gnu * -modi:

  • c * modi definiëren __STRICT_ANSI__.
  • Doelspecifieke definities die niet zijn voorafgegaan door onderstrepingstekens, zoals 'linux', worden gedefinieerd in gnu * -modi.
  • Trigraphs worden standaard uitgeschakeld in gnu * -modi; ze kunnen worden ingeschakeld door de -trigraphs keuze.
  • De parser herkent "asm" en "typeof" als trefwoorden in gnu * -modi; de varianten __asm__ en __typeof__ worden herkend in alle modi.
  • De Apple "blocks" -extensie wordt standaard herkend in gnu * -modi op sommige platforms; het kan worden ingeschakeld in elke modus met de -fblocks keuze.

Meer links


40
2018-03-16 20:47



C99 is straight C99, GNU99 is C99 met gnu-extensies. Zie de GCC manpage.


18
2018-03-15 14:56



C99 is gewoon de versie van de C-standaard vanaf 1999 zoals we dat allemaal kennen. In GCC wordt het niet volledig ondersteund.

GNU99 is een uitbreiding op C99, net zoals GNU98 een uitbreiding is van C98. Van de documenten:

ISO C99 plus GNU-uitbreidingen. Wanneer ISO C99 volledig wordt geïmplementeerd in GCC, wordt dit de standaardinstelling. De naam gnu9x is verouderd.

Clang ondersteunt deze extensies ook.


10
2018-03-15 14:57