6 Расширения семейства языков C
GNU C предоставляет несколько языковых возможностей, отсутствующих в стандарте ISO C. (Опция -pedantic указывает GCC на вывод сообщения об ошибке, если используется любая из этих возможностей.) Для проверки наличия этих возможностей в условной компиляции, проверьте предварительно определённую макрос __GNUC__, которая всегда определена в GCC.
Эти расширения доступны в C и Objective-C. Большинство из них также доступны в C++. См. Расширения языка C++, для расширений, которые применяются только к C++.
Некоторые функции, которые есть в ISO C99, но отсутствуют в C90 или C++, также, как расширения, поддерживаются GCC в режиме C90 и в C++.
| • Выражения-операторы: | Размещение операторов и объявлений внутри выражений. | |
| • Локальные метки: | Метки, локальные для блока. | |
| • Метки как значения: | Получение указателей на метки и вычисленные goto. | |
| • Вложенные функции: | Как в Algol и Pascal, лексическое ограничение областей видимости функций. | |
| • Конструирование вызовов: | Передача вызова другой функции. | |
| • Тип выражения: |
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: | Устаревшие встроенные функции для атомного доступа к памяти. | |
| • Встроенные функции __atomic: | Атомные встроенные функции с моделью памяти. | |
| • Встроенные функции для проверки переполнения целых чисел: | Встроенные функции для выполнения арифметических операций и проверки переполнения. | |
| • Расширения модели памяти x86 для транзакционной памяти: | Модели памяти x86. | |
| • Проверка размера объекта: | Встроенные функции для ограниченной проверки переполнения буфера. | |
| • Встроенные функции для проверки границ указателей: | Встроенные функции для проверки границ указателей. | |
| • Встроенные функции Cilk Plus: | Встроенные функции для расширения языка Cilk Plus. | |
| • Другие встроенные функции: | Другие встроенные функции. | |
| • Встроенные функции целевой платформы: | Встроенные функции, специфичные для конкретных платформ. | |
| • Проверки формата целевой платформы: | Проверки формата, специфичные для конкретных платформ. | |
| • Директивы компилятора: | Директивы компилятора GCC. | |
| • Неименованные поля: | Неименованные поля структур/объединений внутри структур/объединений. | |
| • Потоко-локальные переменные: | Переменные на поток. | |
| • Двоичные константы: | Двоичные константы с префиксом ‘0b’. |
Далее: Расширения C++, Предыдущее: Реализация C++, Вверх: В начало [Содержание][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-7.5.0/gcc/C-Extensions.html