Мой путь изучения C начался с бестселлера «Брайан Керниган, Деннис Ритчи, Язык программирования C, 2-е издание». Там рассказывается как скомпилировать программу в операционной системе Unix, но этот способ не работает в Linux. Авторы книги выкрутились, написав следующее:
В других системах это процедура будет отличаться. Обратитесь к справочнику или специалисту за подробностями.
Побуду специалистом :) и расскажу в данной статье, как скомпилировать первые программы на C и заодно на C++ в терминале Ubuntu.
Текстовый редактор gedit
Для написания первых программ подойдет обычный, используемый по умолчанию в Ubuntu, текстовый редактор с подсветкой синтаксиса — gedit.
![]()  | 
| Рис. 1. Запуск текстового редактора. | 
Первой программой по традиции является «Hello, World!», выводящее приветствие на экран:
#include <stdio.h>
int main(int argc, char **argv)
{
    puts("Hello, world!");
    return 0;
}
Печатаем или копируем текст программы в gedit и сохраняем в файл
Hello.c, например, на рабочий стол. Не самое лучше место для сохранения, но это позволит рассмотреть случай, когда в имени директории содержится пробел.![]()  | 
| Рис. 2. Программа hello, World. | 
Компиляция программы на C
Теперь запускаем терминал, можно через Dash, а можно с помощью горячих клавиш <ctrl> + <Alt> + <T> . Здесь в начале установим инструменты сборки, куда входят необходимые компиляторы
gcc для языка C и g++ для языка C++:sudo apt install build-essential
Для установки требуется ввести пароль, при вводе которого может сложиться впечатление, что ничего не происходит, но на самом деле терминал просто в целях безопасности не отображает символы.
Далее в терминале нам необходимо перейти в директорию, куда сохранили файл с текстом программы. Перемещение выполняется командой
cd (англ. change directory — изменить каталог). Чтобы воспользоваться командой в начале пишется cd, затем через пробел путь, куда нужно перейти.Для перехода на рабочий стол, команда будет следующей:
cd ~/Рабочий\ стол
Обратите внимание на символ обратной косой черты
\ в имени директории Рабочий стол. Обратная косая экранирует пробел, и сообщает команде cd, что пробел и следующие за ним символы являются частью имени. Символ ~ в начале пути обозначает путь до домашней папки пользователя.Для просмотра содержимого директории применяется команда
ls (сокращение от англ. list).![]()  | 
| Рис. 3. Работа в терминале. | 
Команда компиляции для программы на C выглядит следующим образом:
gcc -Wall -o hello hello.c
где:
gcc— компилятор для языка программирования C;-Wall— ключ вывода всех предупреждений компилятора;-o hello— с помощью ключа-oуказывается имя выходного файла;hello.c— имя нашего исходного файла, который компилируем.
Выполнив команду
ls, увидим, что появилась наша скомпилированная программа hello, отмеченная цветом, обозначающим исполняемые программы.В завершение запустим
hello, вводом имени программы с префиксом ./:./hello
Префикс
./ сообщает терминалу о необходимости выполнить программу с заданным именем в текущем каталоге. (Точка — это условное название текущего каталога.)![]()  | 
| Рис. 4. Работа в терминале, продолжение. | 
Компиляция программы на С++
Программы на C++ компилируются аналогично, как и программы на C. «Hello, World!» на C++ можно написать так:
#include <iostream>
int main(int argc, char **argv)
{
    std::cout << "Hello, World!" << std::endl;
    return 0;
}
Сохраняем текст программы в файл под именем
hello2.cpp. Таким образом, команда компилирования будет иметь вид:g++ -Wall -o hello2 hello2.cpp
Для запуска результата вводим в терминале:
./hello2
Заключение
Данный способ позволяет скомпилировать программу лишь из одного файла с исходным кодом. Но этого вполне достаточно, чтобы начать изучение языков программирования C/C++ по книгам или по статьям в интернете.
Более подробно об программировании в Ubuntu или в любом другом дистрибутиве Linux можно прочитать в книгах:
- Иванов Н. Н. — Программирование в Linux. Самоучитель. — 2-е издание;
 - Нейл Метьэ, Ричард Стоунс — Основы программирования в Linux: Пер. с англ. — 4-е издание;
 - Колисниченко Д. Н. — Разработка Linux-приложений.
 




