Spec-Zone.ru › GCC 4

6 Расширения языка семейства C

GNU C предоставляет несколько языковых функций, отсутствующих в стандартном ISO C. (Опция -pedantic указывает GCC на вывод сообщения об ошибке, если используется любая из этих функций.) Чтобы проверить доступность этих функций в условной компиляции, проверьте предварительно определённую макрос __GNUC__, которая всегда определена в GCC.

Эти расширения доступны в C и Objective-C. Большинство из них также доступны в C++. См. Расширения языка C++, для расширений, которые применяются только к C++.

Некоторые функции, которые есть в ISO C99, но отсутствуют в C90 или C++, также, как расширения, принимаются GCC в режиме C90 и в C++.

  • Выражения-операторы: Размещение операторов и объявлений внутри выражений.
  • Локальные метки: Метки, локальные для блока.
  • Метки как значения: Получение указателей на метки и вычисленные переходы.
  • Вложенные функции: Как в Algol и Pascal, лексическое охватывание функций.
  • Конструирование вызовов: Передача вызова другой функции.
  • Typeof: typeof: ссылка на тип выражения.
  • Условные операторы: Пропуск среднего операнда в выражении ‘?:’.
  • __int128: 128-битные целые числа---__int128.
  • Long Long: Двухсловные целые числа---long long int.
  • Комплексные: Типы данных для комплексных чисел.
  • Типы с плавающей запятой: Дополнительные типы с плавающей запятой.
  • Полуточная точность: Плавающая запятая полуточной точности.
  • Десятичные числа с плавающей точкой: Десятичные типы с плавающей точкой.
  • Шестнадцатеричные числа с плавающей точкой: Шестнадцатеричные константы с плавающей точкой.
  • Числа с фиксированной точкой: Типы чисел с фиксированной точкой.
  • Именованные адресные пространства: Именованные адресные пространства.
  • Нулевая длина: Массивы нулевой длины.
  • Пустые структуры: Структуры без членов.
  • Переменная длина: Массивы, длина которых вычисляется во время выполнения.
  • Многоаргументные макросы: Макросы с переменным количеством аргументов.
  • Экранированные новые строки: Несколько более свободные правила для экранированных новых строк.
  • Индексирование: Любой массив может быть индексирован, даже если он не является lvalue.
  • Арифметика указателей: Арифметика на указателях void и указателях на функции.
  • Инициализаторы: Неконстантные инициализаторы.
  • Составные литералы: Составные литералы предоставляют структуры, объединения или массивы как значения.
  • Определённые инициализаторы: Маркирование элементов инициализаторов.
  • Диапазоны case: `case 1 ... 9' и тому подобное.
  • Преобразование к типу объединения: Преобразование к типу объединения из любого члена объединения.
  • Смешанные объявления: Смешивание объявлений и кода.
  • Атрибуты функций: Объявление, что функции не имеют побочных эффектов или что они никогда не возвращают значение.
  • Синтаксис атрибутов: Формальный синтаксис атрибутов.
  • Прототипы функций: Объявления прототипов и определения старого стиля.
  • Комментарии C++: Комментарии C++ распознаются.
  • Знаки доллара: Знак доллара разрешен в идентификаторах.
  • Экранирование символов: ‘\e’ обозначает символ <ESC>.
  • Атрибуты переменных: Указание атрибутов переменных.
  • Атрибуты типов: Указание атрибутов типов.
  • Выравнивание: Определение выравнивания типа или переменной.
  • Встроенные функции: Определение встроенных функций (настолько же быстрых, как макросы).
  • Переменные volatile: Что определяет доступ к объекту volatile.
  • Расширенный ассемблер: Ассемблерные инструкции с выражениями C в качестве операндов. (С их помощью можно определять «встроенные» функции.)
  • Ограничения: Ограничения для операндов ассемблера
  • Метки ассемблера: Указание имени ассемблера, используемого для символа C.
  • Явные переменные регистров: Определение переменных, находящихся в указанных регистрах.
  • Альтернативные ключевые слова: __const__, __asm__, и т.д., для заголовочных файлов.
  • Неполные перечисления: enum foo;, с подробными пояснениями в дальнейшем.
  • Имена функций: Печатаемые строки, являющиеся именем текущей функции.
  • Адрес возврата: Получение адреса возврата или фрейма функции.
  • Расширения векторов: Использование векторных инструкций через встроенные функции.
  • Offsetof: Специальный синтаксис для реализации offsetof.
  • __sync Встроенные функции: Встроенные функции legacy для атомного доступа к памяти.
  • __atomic Встроенные функции: Атомные встроенные функции с моделью памяти.
  • Расширения модели памяти x86 для транзакционной памяти: Модели памяти x86.
  • Проверка размера объекта: Встроенные функции для ограниченной проверки переполнения буфера.
  • Встроенные функции Cilk Plus: Встроенные функции для расширения языка Cilk Plus.
  • Другие встроенные функции: Другие встроенные функции.
  • Встроенные функции целевого процессора: Встроенные функции, специфичные для определённых целевых платформ.
  • Проверки формата целевой платформы: Проверки формата, специфичные для определённых целевых платформ.
  • Директивы: Директивы, поддерживаемые GCC.
  • Неименованные поля: Неименованные поля struct/union внутри struct/union.
  • Локальные переменные потока: Переменные, специфичные для каждого потока.
  • Двоичные константы: Двоичные константы с префиксом ‘0b’.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-4.9.4/gcc/C-Extensions.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API