6.49 Зарезервированные ключевые слова
-ansi и различные параметры -std отключают определенные ключевые слова. Это создает проблемы, когда вы хотите использовать расширения GNU C или универсальный заголовочный файл, который должен быть пригоден для всех программ, включая программы ISO C. Ключевые слова asm, typeof и inline недоступны в программах, скомпилированных с -ansi или -std (хотя inline может быть использовано в программе, скомпилированной с -std=c99 или более поздней версией стандарта). Ключевое слово 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__перед выражением предотвращает предупреждения о расширениях внутри этого выражения. - В C, написание:
[[__extension__ …]]
подавляет предупреждения об использовании атрибутов ‘[[]]’ в версиях C, предшествующих C23.
__extension__ не оказывает никакого влияния, кроме этого.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gcc/Alternate-Keywords.html