Опция -ansi и различные опции -std запрещают определенные ключевые слова. Это создает проблемы, когда нужно использовать расширения GNU C или обычный заголовочный файл, который подключается всеми программами, включая программы ISO C. Ключевые слова asm, typeof [2] и inline недоступны в программах, компилируемых с -ansi или -std (хотя inline может использоваться в программе, компилируемой с указанием -std=c99 или более позднего стандарта C). Ключевое слово restrict стандарта ISO C99 доступно только при использовании -std=gnu99 (что в конечном счете будет использоваться по умолчанию) или -std=c99 (или с эквивалентом -std=iso9899:1999), или опции для более поздней версии стандарта.
Существует способ решить эти проблемы путем добавления двух нижних подчеркиваний '__' в начало и конец проблематичных ключевых слов. Например использовать __asm__ вместо asm, и __inline__ вместо inline.
Другие компиляторы C не примут эти альтернативные ключевые слова. Если вы захотите скомпилировать код с альтернативными ключевыми словами другим компилятором, то можете определить альтернативные ключевые слова в виде макросов, чтобы они заменялись на ключевые слова, которые подходят для используемого компилятора. Это может выглядеть так:
#ifndef __GNUC__
#define __asm__ asm
#endif
Опция -pedantic и некоторые другие опции генерируют предупреждения на многие расширения GNU C. Подавить такие предупреждения можно, если разместить __extension__ перед соответствующим выражением. Слово __extension__ не дает никакого эффекта, кроме этого.
[Ссылки]
1. Alternate Keywords site:gcc.gnu.org. 2. gcc: использование typeof. |