C является простым, переносимым языком программирования, который используется для разработки программного обеспечения для широкого спектра устройств, начиная с серверов и заканчивая встраиваемыми устройствами. Этот язык иногда называют языком «среднего уровня» из-за того, что он занимает нишу между языком ассемблера, который сложен для изучения и практического использования и такими языками высокого уровня, как Python и Java, которые просты в использовании, но не позволяют добиться сопоставимой скорости работы приложений.
Компилятор является чрезвычайно важным программным компонентом, осуществляющим преобразование разработанного человеком кода на языке C в исполняемый компьютером бинарный код.
Существует множество компиляторов языка C; некоторые из них являются свободными программным обеспечением с открытым исходным кодом, некоторые — пропиетарным программным обеспечением с закрытым исходным кодом, причем компиляторы из второй группы обычно позволяют использовать дополнительные возможности, направленные на повышение производительности и стабильности результирующих бинарных файлов. Двумя наиболее популярными компиляторами с открытым исходным кодом являются GCC и Clang.
Первый вариант языка C был представлен в 1972 году и, хотя многие аспекты языка с того времени не изменились, в него все же был внесен ряд важных изменений. Эти изменения включают объявление устаревшими небезопасных функций стандартной библиотеки, таких, как puts, добавление новых функций в эту же стандартную библиотеку, а также новые синтаксические конструкции. В данном руководстве будут в полной мере использоваться возможности современного стандарта языка C99, о чем необходимо сообщать компилятору с помощью соответствующего параметра --std=c99, например:
$ gcc myfile.c --std=c99 -o myfile
Примечание: в некоторых дистрибутивах, таких, как Ubuntu и Debian, для активации поддержки стандарта C99 может использоваться типичный для UNIX-систем подход, связанный с вызовом компилятора посредством символической ссылки, например:
$ c99 myfile -o myfile
Предупреждения указывают на проблемы с исходным кодом разрабатываемых программных компонентов. Они не приводят к прерыванию процесса компиляции, а лишь сообщают разработчику о том, что стоит обратить внимание на строки кода с определенными номерами.
Сообщения об ошибках, с другой стороны, указывают на проблемы с исходным кодом программных компонентов, которые делают его компиляцию невозможной и должны быть устранены в обязательном порядке.
Для того, чтобы сделать исходный код программного компонента настолько корректным, насколько это возможно, следует активировать режим вывода всех предупреждений и сообщений об ошибках с помощью параметров -Wall и -pedantic, например:
$ gcc myfile.c -Wall -pedantic --std=c99 myfile