Использование GNU Compiler Collection (GCC)
Этот файл документирует использование GNU компиляторов. Авторское право © 1988-2015 Free Software Foundation, Inc.Разрешается копировать, распространять и/или изменять этот документ на условиях GNU Free Documentation License, Версии 1.3 или любой более поздней версии, опубликованной Free Software Foundation; при этом не изменяемые разделы — «Финансирование свободного программного обеспечения», тексты на обложке — (a) (см. ниже), а тексты на задней обложке — (b) (см. ниже). Копия лицензии включена в раздел, озаглавленный «GNU Free Documentation License».
(a) Текст на передней обложке FSF:
Руководство GNU
(b) Текст на задней обложке FSF:
У вас есть свобода копировать и изменять это руководство GNU, как и программное обеспечение GNU. Копии, опубликованные Free Software Foundation, собирают средства для развития GNU.
Краткое содержание
- Введение
- 1 Языки программирования, поддерживаемые GCC
- 2 Стандарты языков, поддерживаемые GCC
- 3 Командные опции GCC
- 4 Определяемое реализацией поведение C
- 5 Определяемое реализацией поведение C++
- 6 Расширения языка семейства C
- 7 Расширения языка C++
- 8 Функции GNU Objective-C
- 9 Бинарная совместимость
- 10
gcov—Программа измерения покрытия кода - 11 Известные причины проблем с GCC
- 12 Сообщения об ошибках
- 13 Как получить помощь по GCC
- 14 Вклад в разработку GCC
- Финансирование свободного программного обеспечения
- Проект GNU и GNU/Linux
- Общая публичная лицензия GNU
- GNU Free Documentation License
- Авторы GCC
- Индекс опций
- Индекс ключевых слов
Содержание
- Введение
- 1 Поддерживаемые языки программирования GCC
- 2 Поддерживаемые стандарты языков программирования GCC
-
3 Команды GCC
- 3.1 Краткое описание опций
- 3.2 Опции, управляющие типом вывода
- 3.3 Компиляция программ C++
- 3.4 Опции, управляющие диалектом C
- 3.5 Опции, управляющие диалектом C++
- 3.6 Опции, управляющие диалектами Objective-C и Objective-C++
- 3.7 Опции для управления форматированием диагностических сообщений
- 3.8 Опции для запроса или подавления предупреждений
- 3.9 Опции для отладки программы или GCC
- 3.10 Опции, управляющие оптимизацией
- 3.11 Опции, управляющие препроцессором
- 3.12 Передача опций ассемблеру
- 3.13 Опции для компоновки
- 3.14 Опции для поиска каталогов
- 3.15 Указание подпроцессов и переключателей, передаваемых им
- 3.16 Указание целевой машины и версии компилятора
-
3.17 Модели и конфигурации оборудования
- 3.17.1 Опции AArch64
- 3.17.2 Опции Adapteva Epiphany
- 3.17.3 Опции ARC
- 3.17.4 Опции ARM
- 3.17.5 Опции AVR
- 3.17.6 Опции Blackfin
- 3.17.7 Опции C6X
- 3.17.8 Опции CRIS
- 3.17.9 Опции CR16
- 3.17.10 Опции Darwin
- 3.17.11 Опции DEC Alpha
- 3.17.12 Опции FR30
- 3.17.13 Опции FRV
- 3.17.14 Опции GNU/Linux
- 3.17.15 Опции H8/300
- 3.17.16 Опции HPPA
- 3.17.17 Опции Intel 386 и AMD x86-64
- 3.17.18 Опции i386 и x86-64 для Windows
- 3.17.19 Опции IA-64
- 3.17.20 Опции LM32
- 3.17.21 Опции M32C
- 3.17.22 Опции M32R/D
- 3.17.23 Опции M680x0
- 3.17.24 Опции MCore
- 3.17.25 Опции MeP
- 3.17.26 Опции MicroBlaze
- 3.17.27 Опции MIPS
- 3.17.28 Опции MMIX
- 3.17.29 Опции MN10300
- 3.17.30 Опции Moxie
- 3.17.31 Опции MSP430
- 3.17.32 Опции NDS32
- 3.17.33 Опции Nios II
- 3.17.34 Опции PDP-11
- 3.17.35 Опции picoChip
- 3.17.36 Опции PowerPC
- 3.17.37 Опции RL78
- 3.17.38 Опции IBM RS/6000 и PowerPC
- 3.17.39 Опции RX
- 3.17.40 Опции S/390 и zSeries
- 3.17.41 Опции Score
- 3.17.42 Опции SH
- 3.17.43 Опции Solaris 2
- 3.17.44 Опции SPARC
- 3.17.45 Опции SPU
- 3.17.46 Опции System V
- 3.17.47 Опции TILE-Gx
- 3.17.48 Опции TILEPro
- 3.17.49 Опции V850
- 3.17.50 Опции VAX
- 3.17.51 Опции VMS
- 3.17.52 Опции VxWorks
- 3.17.53 Опции x86-64
- 3.17.54 Опции Xstormy16
- 3.17.55 Опции Xtensa
- 3.17.56 Опции zSeries
- 3.18 Опции для правил генерации кода
- 3.19 Переменные среды, влияющие на GCC
- 3.20 Использование предварительно скомпилированных заголовков
-
4 Определяемое реализацией поведение C
- 4.1 Трансляция
- 4.2 Среда
- 4.3 Идентификаторы
- 4.4 Символы
- 4.5 Целые числа
- 4.6 Числа с плавающей запятой
- 4.7 Массивы и указатели
- 4.8 Подсказки
- 4.9 Структуры, объединения, перечисления и битовые поля
- 4.10 Квалификаторы
- 4.11 Деклараторы
- 4.12 Утверждения
- 4.13 Директивы препроцессора
- 4.14 Функции библиотеки
- 4.15 Архитектура
- 4.16 Локально-зависимое поведение
- 5 Определяемое реализацией поведение C++
-
6 Расширения языков семейства C
- 6.1 Выражения и объявления в операторах
- 6.2 Метки, объявленные локально
- 6.3 Метки как значения
- 6.4 Вложенные функции
- 6.5 Создание вызовов функций
-
6.6 Ссылка на тип с
typeof - 6.7 Условные операторы с пропущенными операндами
- 6.8 128-битные целые числа
- 6.9 Целые числа двойной длины
- 6.10 Комплексные числа
- 6.11 Дополнительные типы с плавающей точкой
- 6.12 Полуточная плавающая точка
- 6.13 Десятичные типы с плавающей точкой
- 6.14 Шестнадцатеричные числа с плавающей точкой
- 6.15 Типы с фиксированной точкой
- 6.16 Имена адресных пространств
- 6.17 Массивы нулевой длины
- 6.18 Структуры без членов
- 6.19 Массивы переменной длины
- 6.20 Макросы с переменным числом аргументов.
- 6.21 Несколько измененные правила для экранированных символов новой строки
- 6.22 Массивы, не являющиеся lvalue, могут иметь индексы
-
6.23 Арифметика указателей на
voidи указателей на функции - 6.24 Непостоянные инициализаторы
- 6.25 Сложные литералы
- 6.26 Инициализаторы с указанием места
- 6.27 Диапазоны значений case
- 6.28 Приведение к типу объединения
- 6.29 Смешанные объявления и код
- 6.30 Объявление атрибутов функций
- 6.31 Синтаксис атрибутов
- 6.32 Прототипы и определения функций старого стиля
- 6.33 Комментарии в стиле C++
- 6.34 Знаки доллара в именах идентификаторов
- 6.35 Символ <ESC> в константах
- 6.36 Указание атрибутов переменных
- 6.37 Указание атрибутов типов
- 6.38 Определение выравнивания типов или переменных
- 6.39 Встроенная функция так же быстра, как макрос
- 6.40 Когда происходит обращение к изменчивому объекту?
- 6.41 Инструкции ассемблера с операндами выражений C
-
6.42 Ограничения для операндов
asm - 6.43 Управление именами, используемыми в коде ассемблера
- 6.44 Переменные в указанных регистрах
- 6.45 Альтернативные ключевые слова
-
6.46 Неполные типы
enum - 6.47 Имена функций в виде строк
- 6.48 Получение адреса возврата или кадра функции
- 6.49 Использование векторных инструкций через встроенные функции
- 6.50 Offsetof
- 6.51 Устаревшие встроенные функции __sync для атомарного доступа к памяти
- 6.52 Встроенные функции для атомарных операций с учётом модели памяти
- 6.53 x86-специфические расширения модели памяти для транзакционной памяти
- 6.54 Встроенные функции для проверки размера объекта
- 6.55 Встроенные функции расширения языка C/C++ Cilk Plus.
- 6.56 Другие встроенные функции, предоставляемые GCC
- 6.57 Встроенные функции, специфичные для определенных целевых машин
- 6.57.1 Встроенные функции Alpha
- 6.57.2 Встроенные функции Altera Nios II
- 6.57.3 Встроенные функции ARC
- 6.57.4 Встроенные функции ARC SIMD
- 6.57.5 Встроенные функции ARM iWMMXt
-
6.57.6 Встроенные функции ARM NEON
- 6.57.6.1 Сложение
- 6.57.6.2 Умножение
- 6.57.6.3 Умножение-сумма
- 6.57.6.4 Умножение-вычитание
- 6.57.6.5 Объединённое умножение-сумма
- 6.57.6.6 Объединённое умножение-вычитание
- 6.57.6.7 Округление к целому (к ближайшему, при совпадении - к чётному)
- 6.57.6.8 Округление к целому (к ближайшему, при совпадении - от нуля)
- 6.57.6.9 Округление к целому (в сторону +∞)
- 6.57.6.10 Округление к целому (в сторону -∞)
- 6.57.6.11 Округление к целому (в сторону 0)
- 6.57.6.12 Вычитание
- 6.57.6.13 Сравнение (равно)
- 6.57.6.14 Сравнение (больше или равно)
- 6.57.6.15 Сравнение (меньше или равно)
- 6.57.6.16 Сравнение (больше)
- 6.57.6.17 Сравнение (меньше)
- 6.57.6.18 Сравнение (абсолютное больше или равно)
- 6.57.6.19 Сравнение (абсолютное меньше или равно)
- 6.57.6.20 Сравнение (абсолютное больше)
- 6.57.6.21 Сравнение (абсолютное меньше)
- 6.57.6.22 Проверка битов
- 6.57.6.23 Абсолютная разность
- 6.57.6.24 Абсолютная разность и сумма
- 6.57.6.25 Максимальное значение
- 6.57.6.26 Минимальное значение
- 6.57.6.27 Попарное сложение
- 6.57.6.28 Попарное сложение, расширение и накопление с одним оператором
- 6.57.6.29 Максимальное значение (свертка)
- 6.57.6.30 Минимальное значение (свертка)
- 6.57.6.31 Приблизительное обращение
- 6.57.6.32 Сдвиг влево вектора
- 6.57.6.33 Сдвиг влево вектора на константу
- 6.57.6.34 Сдвиг вправо вектора на константу
- 6.57.6.35 Сдвиг вправо вектора на константу и накопление
- 6.57.6.36 Сдвиг вправо вектора и вставка
- 6.57.6.37 Сдвиг влево вектора и вставка
- 6.57.6.38 Модуль числа
- 6.57.6.39 Отрицание
- 6.57.6.40 Побитовое отрицание
- 6.57.6.41 Подсчёт старших значащих битов
- 6.57.6.42 Подсчёт старших нулей
- 6.57.6.43 Подсчёт установленных битов
- 6.57.6.44 Приблизительное обращение
- 6.57.6.45 Приблизительное обращение квадратного корня
- 6.57.6.46 Получение элементов из вектора
- 6.57.6.47 Установка элементов в векторе
- 6.57.6.48 Создание вектора из литерального битового шаблона
- 6.57.6.49 Установка всех элементов вектора в одно и то же значение
- 6.57.6.50 Объединение векторов
- 6.57.6.51 Разделение векторов
- 6.57.6.52 Преобразования
- 6.57.6.53 Перемещение, сужение с одним оператором
- 6.57.6.54 Перемещение, расширение с одним оператором
- 6.57.6.55 Табличный поиск
- 6.57.6.56 Расширенный табличный поиск
- 6.57.6.57 Умножение, элемент
- 6.57.6.58 Длинное умножение, элемент
- 6.57.6.59 Насыщающее удвоение длинного умножения, элемент
- 6.57.6.60 Насыщающее удвоение умножения высокой части, элемент
- 6.57.6.61 Умножение-сумма, элемент
- 6.57.6.62 Умножение-вычитание, элемент
- 6.57.6.63 Умножение вектора на скаляр
- 6.57.6.64 Длинное умножение вектора на скаляр
- 6.57.6.65 Насыщающее удвоение длинного умножения вектора на скаляр
- 6.57.6.66 Насыщающее удвоение умножения высокой части вектора на скаляр
- 6.57.6.67 Умножение-сумма вектора на скаляр
- 6.57.6.68 Умножение-вычитание вектора на скаляр
- 6.57.6.69 Извлечение из вектора
- 6.57.6.70 Обратный порядок элементов
- 6.57.6.71 Выбор битов
- 6.57.6.72 Транспонирование элементов
- 6.57.6.73 Объединение элементов
- 6.57.6.74 Разъединение элементов
- 6.57.6.75 Загрузка элементов/структур, варианты VLD1
- 6.57.6.76 Сохранение элементов/структур, варианты VST1
- 6.57.6.77 Загрузка элементов/структур, варианты VLD2
- 6.57.6.78 Сохранение элементов/структур, варианты VST2
- 6.57.6.79 Загрузка элементов/структур, варианты VLD3
- 6.57.6.80 Сохранение элементов/структур, варианты VST3
- 6.57.6.81 Загрузка элементов/структур, варианты VLD4
- 6.57.6.82 Сохранение элементов/структур, варианты VST4
- 6.57.6.83 Логические операции (И)
- 6.57.6.84 Логические операции (ИЛИ)
- 6.57.6.85 Логические операции (исключающее ИЛИ)
- 6.57.6.86 Логические операции (И-НЕ)
- 6.57.6.87 Логические операции (ИЛИ-НЕ)
- 6.57.6.88 Преобразования типов (переинтерпретация)
- 6.57.7 Встроенные функции ARM ACLE
- 6.57.8 Встроенные функции AVR
- 6.57.9 Встроенные функции Blackfin
- 6.57.10 Встроенные функции FR-V
- 6.57.11 Встроенные функции X86
- 6.57.12 Встроенные функции X86 для транзакционной памяти
- 6.57.13 Встроенные функции MIPS DSP
- 6.57.14 Поддержка MIPS Paired-Single
- 6.57.15 Встроенные функции MIPS Loongson
- 6.57.16 Другие встроенные функции MIPS
- 6.57.17 Встроенные функции MSP430
- 6.57.18 Встроенные функции NDS32
- 6.57.19 Встроенные функции picoChip
- 6.57.20 Встроенные функции PowerPC
- 6.57.21 Встроенные функции PowerPC AltiVec
- 6.57.22 Встроенные функции PowerPC с аппаратной транзакционной памятью
- 6.57.23 Встроенные функции RX
- 6.57.24 Встроенные функции S/390 System z
- 6.57.25 Встроенные функции SH
- 6.57.26 Встроенные функции SPARC VIS
- 6.57.27 Встроенные функции SPU
- 6.57.28 Встроенные функции TI C6X
- 6.57.29 Встроенные функции TILE-Gx
- 6.57.30 Встроенные функции TILEPro
- 6.58 Проверка формата, специфичная для конкретных целевых машин
-
6.59 Принятые GCC директивы
- 6.59.1 ARM директивы
- 6.59.2 M32C директивы
- 6.59.3 MeP директивы
- 6.59.4 RS/6000 и PowerPC директивы
- 6.59.5 Darwin директивы
- 6.59.6 Solaris директивы
- 6.59.7 Переименование символов с помощью директив
- 6.59.8 Директивы упаковки структур
- 6.59.9 Директивы слабых символов
- 6.59.10 Директивы диагностики
- 6.59.11 Директивы видимости
- 6.59.12 Директивы макросов push/pop
- 6.59.13 Директивы опций для конкретных функций
- 6.59.14 Директивы для циклов
- 6.60 Анонимные поля struct/union внутри struct/union
- 6.61 Локальное хранилище потоков
-
6.62 Бинарные константы с префиксом ‘
0b’
-
7 Расширения языка C++
- 7.1 Когда происходит доступ к изменяемому объекту C++?
- 7.2 Ограничение алиасов указателей
- 7.3 Нечеткая привязка
- 7.4 #pragma interface и реализация
- 7.5 Где шаблон?
- 7.6 Извлечение указателя на функцию из связанного указателя на член функции-члена
- 7.7 Специфичные для C++ атрибуты переменных, функций и типов
- 7.8 Многоверсионность функций
- 7.9 Связывание пространств имен
- 7.10 Типовые признаки
- 7.11 Исключения Java
- 7.12 Устаревшие возможности
- 7.13 Обратная совместимость
-
8 Возможности GNU Objective-C
- 8.1 API времени выполнения GNU Objective-C
-
8.2
+load: Выполнение кода перед main - 8.3 Кодирование типов
- 8.4 Уборка мусора
- 8.5 Константные строковые объекты
- 8.6 compatibility_alias
- 8.7 Исключения
- 8.8 Синхронизация
- 8.9 Быстрое перечисление
- 8.10 Обмен сообщениями с помощью времени выполнения GNU Objective-C
- 9 Бинарная совместимость
-
10
gcov— программа тестирования покрытия кода -
11 Известные причины проблем с GCC
- 11.1 Фактические ошибки, которые мы еще не исправили
- 11.2 Взаимодействие
- 11.3 Несовместимости GCC
- 11.4 Зафиксированные заголовочные файлы
- 11.5 Стандартные библиотеки
- 11.6 Разочарования и недопонимания
- 11.7 Распространенные недопонимания с GNU C++
- 11.8 Некоторые изменения, которых мы не хотим вносить
- 11.9 Сообщения о предупреждениях и об ошибках
- 12 Сообщения об ошибках
- 13 Как получить помощь с GCC
- 14 Вклад в разработку GCC
- Финансирование свободного ПО
- Проект GNU и GNU/Linux
- Общая публичная лицензия GNU
Введение
В данном руководстве описывается использование компиляторов GNU, их возможности и несовместимости, а также способы сообщения об ошибках. Оно соответствует версии компиляторов (GCC) 4.9.4. В отдельном руководстве описаны внутренние механизмы компиляторов GNU, включая способы их портирования на новые платформы и некоторые сведения о написании фронтендов для новых языков. См. Введение.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-4.9.4/gcc/index.html