Spec-Zone.ru › GCC 7

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

Spec-Zone.ru

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