По умолчанию при компиляции не отображается никакх предупреждений. Тем не менее предупреждения компилятора могут подсказать о наличие определенных проблем в коде, даже если код успешно компилируется. Простейший пример: в программе определена переменная, но она нигде не используется. И при компиляции компилятор может подсказать о данной пробелеме, что поможет разработчику идентифицировать проблему и сразу отреагировать на нее.
Для компиляции с предупреждениями применяется флаг -Wall
:
gcc -Wall source.c
Есть разные версии стандарта языка Си, и каждый из них может добавлять дополнительный функционал, который мы, возможно, захотим использовать в программе. С помощью флага -std= можно указать конкретный стандарт, добавив c99
, c11
или c17
. Например, для компиляции в стандарт c99
нужно написать:
gcc -std=c99 source.c
Аналогично для компиляции в стандарт C11
используется команда:
gcc -std=c11 source.c
Чтобы гарантировать, что программа будет строго соответствовать определенному стандарту, можно указать флаг -pedantic
gcc -std=c99 -Wall -pedantic source.c gcc -std=c11 -Wall -pedantic source.c gcc -std=c17 -Wall -pedantic source.c gcc -std=c23 -Wall -pedantic source.c
В этом случае компилятор будет генерировать предупреждения, если код не соответствует правилам стандарта.
Для того, чтобы автоматически запустить приложение после компиляции, можно использовать следующую команду:
gcc source.c & ./a.out
Можно налепить в одну команду различные опции:
gcc -std=c17 -Wall -pedantic app.c -o app.exe & app
Опция -S позволяет сгенерировать файл с ассемблерным кодом:
gcc app.c -S
В данном случае по содержимому app.c будет сгенерирован файл, который называется как и исходный файл, только имеет расширение .s
, то есть в данном случае будет сгенерирован
файл app.s. Этот файл будет содержать код на ассемблере, причем в качестве синтаксиса применяется синтаксис ассемблера GAS (ассемблера от GNU).
Основные параметры компилятора Clang в ряде случаев повторяют параметры для gcc. Например, компиляция с помощью Clang под определенный стандарт с выводом ошибок:
clang -std=c17 -Wall -pedantic app.c -o app.exe & app.exe