6.44 Альтернативные ключевые слова
-ansi и различные варианты -std отключают определённые ключевые слова. Это вызывает проблемы, когда требуется использование расширений GNU C или общедоступный заголовочный файл, который должен быть пригоден для всех программ, включая программы ISO C. Ключевые слова asm, typeof и inline недоступны в программах, скомпилированных с -ansi или -std (хотя inline может быть использован в программе, скомпилированной с -std=c99 или -std=c11). Ключевое слово ISO C99 restrict доступно только при использовании -std=gnu99 (которое в конечном итоге станет стандартным), -std=c99 (или эквивалентное -std=iso9899:1999), или варианта более поздней версии стандарта.
Для решения этих проблем необходимо добавлять ‘__’ в начало и конец каждого проблемного ключевого слова. Например, используйте __asm__ вместо asm, и __inline__ вместо inline.
Другие компиляторы C не будут принимать эти альтернативные ключевые слова; если требуется компиляция с другим компилятором, можно определить альтернативные ключевые слова как макросы для их замены обычными ключевыми словами. Выглядит это так:
#ifndef __GNUC__ #define __asm__ asm #endif
-pedantic и другие варианты вызывают предупреждения для многих расширений GNU C. Можно предотвратить такие предупреждения в одном выражении, написав __extension__ перед выражением. __extension__ не оказывает никакого влияния помимо этого.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-5.5.0/gcc/Alternate-Keywords.html