Как написать и запустить программу на языке C в Linux
Linux — это рай для разработчиков, потому что это операционная система с открытым исходным кодом, свободно распространяемая и предлагающая бесплатные инструменты программирования для всех популярных языков программирования. В этой статье мы расскажем вам, как написать, скомпилировать и запустить простую программу на языке Си в Ubuntu Linux. Это послужит вам основой для перехода к более сложным и полезным программам на Си, которые вы можете написать и запустить на Linux.
Для компиляции простой программы на языке C мы используем инструмент командной строки Linux — терминал. Чтобы открыть терминал, вы можете использовать Ubuntu Dash или комбинацию клавиш Ctrl+Alt+T.
Шаг 1: Установите необходимые для сборки пакеты
Для компиляции и выполнения программы на языке C необходимо, чтобы в вашей системе были установлены необходимые пакеты. Введите следующую команду от имени root в терминале Linux:
sudo apt-get install build-essential

Вам будет предложено ввести пароль для root; после этого начнется процесс установки. Пожалуйста, убедитесь, что вы подключены к интернету.
Шаг 2: Напишите простую программу на языке C
После установки необходимых пакетов, давайте напишем простую программу на языке C.
nano sampleProgram.c
Откройте графический текстовый редактор Ubuntu и напишите или скопируйте в него следующий пример программы:
#include int main()
Затем сохраните файл. В этом примере я назвал свою программу на языке Си как sampleProgram.c

Шаг 3: Скомпилируйте программу на языке C с помощью компилятора gcc
В терминале введите следующую команду, чтобы создать исполняемую версию написанной вами программы:
gcc [ИмяФайла].c -o [ИмяПрограммы]
gcc sampleProgram.c -o sampleProgram
Шаг 4: Запуск программы
Последний шаг — запуск скомпилированной программы на языке C. Для этого используйте следующий синтаксис:
./Имя программы
./sampleProgram

Вы можете видеть, как программа выполняется в приведенном выше примере, отображая текст, который мы написали для печати через нее.
Из этой статьи вы узнали, как написать, скомпилировать и запустить простую программу на языке C в Linux.
Первая программа
Теги: Первая программа на си. Азы си. Си Borland. Си Code Gear. Си Embarcadero. Си MS Visual Studio. Си MS Express.
Пишем первую программу на си
Д ля начала, необходимо установить программное обеспечение. В принципе не важно, каким ПО вы будете пользоваться, также как не важна и операционная система. Но в течение всего курса я буду приводить примеры на MS Visula Studio 2012 Express Edition. Visual Studio 2012 Express Edition бесплатный и его за глаза хватит для изучения всего курса. Кроме того, как показала практика, он гораздо строже относится к коду и даёт более полноценное описание ошибок и предупреждений. При изучении языка можно использовать Borland (он же CodeGEAR, он же Embarcadero и т.д.), Dev Cpp, MinGW, или gcc, или что вы ещё захотите.
- Пример для Visual Studio
- Пример для Borland
- Пример для cc/gcc
- Код программы
Пример для MS Visual Studio
1. Открываем IDE, заходим Файл | Создать проект.
2. Выбираем консольное приложение и даём ему имя. В данном случае first_program
4. Ставим галочку «Пустой проект».
5. После чего получаем пустую структуру проекта. Добавим новый элемент: правый клик мыши по папке
«Файлы исходного кода» | Добавить | Создать элемент.
Добавляем новый cpp файл, но сохраняем его с расширением .c
Я назвал файл main.c Всё, готово, можно писать программу. Пропустите шаги для других платформ.
Borland
У меня установлен только Code Gear C++Builder 2007, но в остальных (и предыдущих) релизах всё делается также.
1. Создадим новый проект File | New | Other.
2. Добавляем консольное приложение
3. Выбираем язык си
4. Получаем готовый проект. Его необходимо сохранить с тем именем, которое захотите. До тех пор сам проект и все файлы будут иметь имена по умолчанию. Вы можете удалить то, что Borland по умолчанию прописал в тексте программы.
Пример для cc/gcc для терминала
О ткройте ваш любимый текстовый редактор и скопируйте туда код программы.
#include int main(int argc, char* argv[])
Если вы сохранили программу в файле с именем hello.c, то наберите в терминале команду
cc hello.c -o hello
либо
gcc hello -o hello
При этом, очевидно, вы должны находиться в папке с программой. gcc создаст исполняемый файл с именем hello. Запустите его, и он выведет Hello, World!
./hello
Иногда могут возникнуть проблемы с правами доступа. Проверьте, что у вас исполняемый файл, иначе дайте себе привелегии на запуск.
chmod 760 hello
Если у вас несколько файлов, то необходимо будет перечислить имена всех си файлов по порядку. Например, если у вас есть ещё два файла simple.h и simple.c, то нужно прописать
cc hello.c simple.c -o hello
Код программы
Принято в первой программе выводить Hello, World! на экран.
#include #include int main(int argc, char* argv[])
Запустите программу ( Run | Run или F9 для борланда, Построение | Построить решение или F5 для MS) Программа выведет Hello, World! и будет ждать, когда вы нажмёте на любую клавишу.
Рассмотрим код подробнее. Первые две строки
#include #include
директивы компилятору на подключение стандартных библиотек stdio (Standard Input Output — стандартная библиотека ввода вывода) и conio (Console Input Output — стандартная библиотека консоли вывода вывода). Расширение .h указывает, что это заголовочные файлы (header files). Компилятор копирует код библиотек conio и stdio, и даёт возможность использовать функции, описанные в этих библиотеках.
int main(int argc, char* argv[])
Это функция main. Она отличается от остальных функций, которые вы можете определить тем, что является точкой входа — с неё начинается выполнение программы.
Функция main имеет два параметра — число параметров argc и массив переданных параметров argv. Эти аргументы необязательные, поэтому можно их не писать. Об их использовании поговорим позже.
#include #include int main()
Функция main должна возвращать целое число. Если это 0, то функция отработала без ошибок. В современном стандарте си можно не возвращать 0, и описать функцию как void main.
#include #include void main()
Наша программа теперь выглядит совсем просто. Строка
printf("Hello, World!");
выводит строку Hello, World! на экран монитора.
_getch()
ожидает нажатия на клавишу.
Давайте сделаем что-нибудь посложнее, чтобы научиться добавлять новые файлы в программу. Сейчас для вас важно научиться добавлять новые файлы, если часть кода останется непонятной, это не беда.
1. Создайте новый заголовочный файл в папке «Заголовочные файлы», назовите его simple.h
2. Создайте новый файл simple.c в папке «Файлы исходного кода».
3. Добавьте в simple.h
#ifndef _SIMPLE_H_ #define _SIMPLE_H_ #include #include void doSomething(); #endif
Здесь мы объявили новую функцию doSomething. У неё отсутствует тело, оно будет описано в файле simple.c. Здесь же мы подключаем и библиотеки stdio и conio
Добавьте в simple .c
#include «simple.h» void doSomething()
Мы включаем в файл simple.c заголовочный файл. Он пишется в двойных кавычках, потому что это не файл из стандартной библиотеки. Файлы стандартной библиотеки обычно располагаются в папке include самой IDE. Если поместить туда наши файлы, то их тоже можно будет объявлять в угловых скобках. В двойных кавычках можно также прописывать абсолютные пути к файлам. Так как мы уже включили библиотеки conio и stdio в .h файле, то они «видны» и в .c файле.
Далее, в main.c
#include «simple.h» int main(int argc, char* argv[])
Мы подключаем только заголовочный файл. Содержимое simple.c будет добавлено автоматически. Собираем проект (F5 или F9, или что там у вас за среда. ) Если у вас всё заработало то отлично, вы научились добавлять новые файлы в проект.
ru-Cyrl 18- tutorial Sypachev S.S. 1989-04-14 sypachev_s_s@mail.ru Stepan Sypachev students

Всё ещё не понятно? – пиши вопросы на ящик
Язык Си в примерах/Простейшая программа «Hello World»
Первая программа, которую мы рассмотрим, — это «Hello World» — программа, которая выведет на экран строку текста «Hello, World!» («Здравствуй, мир!») и закончит своё выполнение.
#include int main (void) puts ("Hello, World!"); return 0; >
Посмотрим на неё внимательно. Первая строка — #include — означает «включи заголовок stdio.h ». В этом заголовке объявляются функции, связанные с вводом и выводом данных. [1] [2]
Аббревиатуру stdio можно перевести как стандартный ввод-вывод (англ. standard input/output ). Буква «h» после точки означает заголовок (англ. header ). В заголовках (которые как правило представлены отдельными заголовочными файлами) обычно объявляются предоставляемые соответствующими им библиотеками функции, типы данных, константы и определения препроцессора. [3]
Далее идёт определение функции main . Оно начинается с объявления:
int main (void)
что значит: «функция с именем main , которая возвращает целое число (число типа int от англ. integer ) и у которой нет аргументов (void) »
В качестве варианта, стандарт допускает определение функции main как функции двух аргументов ( int argc и char *argv[] — имена, разумеется, могут быть произвольными), что используется для получения доступа к аргументам командной строки из программы. В данном случае, эта возможность не требуется, поэтому функция определена как безаргументная (что также явно разрешено стандартом.) [4]
Английское слово void можно перевести как «пустота». Далее открываются фигурные скобки и идёт тело функции, в конце фигурные скобки закрываются. Функция main — главная функция программы, именно с нее начинается выполнение программы.
Тело функции, в свою очередь, определяет последовательность действий, выполняемых данной функцией — логику функции. Наша функция выполняет одно единственное действие:
puts ("Hello, World!");
Это действие, в свою очередь, есть вызов функции puts стандартной библиотеки. [5] В результате выполнения этого вызова, на стандартный вывод (которым, скорее всего, окажется экран или окно на экране) печатается строка Hello, world! .
Затем идёт команда return 0; , которая завершает выполнение функции с возвратом значения 0, определяемого стандартом (для функции main ) как код успешного завершения. [6] [7]
Вариант «классический» [ править ]
Этот вариант отличается использованием функций printf (вместо puts ) и getchar .
#include int main (void) printf ("Hello, World!\n"); getchar (); return 0; >
В отличие от функции puts , выводящей переданную в качестве аргумента символьную строку, первый и обязательный аргумент функции printf определяет формат вывода. [8]
В общем случае, формат состоит из произвольного текста (не включающего символ % ) «перемешанного» с указателями преобразований (предваряемыми символом % ). В данном случае, однако, эта возможность не используется и никаких преобразований не выполняется.
Обратите внимание на появившуюся в строковой константе комбинацию \n — она включает в выводимую строку управляющий код (или управляющий символ) перевода (также разрыва или завершения) строки. В отличие от функции puts , всегда добавляющей этот код к выводимой строке, printf требует явного его указания.
Действующая редакция стандарта определяет семь таких комбинаций, причем все они записываются с помощью символа обратной косой черты \ (см. ASCII коды символов). [9]
Обратим внимание и на следующее новшество:
getchar ();
Окружение, в котором запускается программа, как правило можно настроить так, что вывод программы будет оставаться на экране после ее выполнения неограниченно долго. Проще всего это обеспечить вызывая программу из командного интерпретатора (который, в свою очередь, может быть запущен в окне эмулятора терминала) или (в зависимости от системы) окна Cmd.exe.
Однако, при запуске непосредственно из графического окружения, отведенное программе окно может закрыться сразу же после завершения программы. Функция getchar [10] ожидает ввод пользователя, тем самым «откладывая» завершение программы ( return ). Какие именно действия могут прервать это ожидание — зависит от системы, однако можно надеяться, что нажатие клавиши ⏎ Enter завершит эту функцию в любой системе.
В некоторых руководствах для этой же цели предлагается функция getch . Однако, эта функция (в отличие от getchar ) не является стандартной и, к тому же, зависима от платформы. Так, в некоторых системах использование getch требует включения файла curses.h и предшествующего вызова функции initscr . В других системах, однако, getch может быть объявлена в conio.h , и выполнение initscr — не требуется.
Вариант «экзотический» [ править ]
Наконец, рассмотрим следующий, выходящий за рамки стандарта, вариант этой программы.
#include int main (void) MessageBox (0, "Hello, World!", "Message", MB_OK); return 0; >
Использование заголовка windows.h может произвести впечатление приемлемости этого варианта кода в рамках только лишь одной конкретной системы. Однако, для использованного здесь интерфейса существует и независимая свободная реализация — Wine, — позволяющая собрать и выполнить данный вариант на таких системах, как, например, GNU/Linux, FreeBSD, Solaris и Mac OS X.
См. также [ править ]
Примечания [ править ]
- ↑ В действительности, #include <. >— это директива препроцессора, то есть команда, которая выполняется до начала компиляции файла. Смысл этой директивы очень прост и заключается в том, чтобы на место, где указана эта директива, вставить содержимое файла, имя которого указано в угловых скобках. Обычно заголовочные файлы содержат только прототипы функций, то есть просто список функций с указанием аргументов и типа возвращаемого значения.
- ↑6.10.2 Source file inclusion (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.
- ↑7.21 Input/output stdio.h (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.
- ↑5.1.2.2.1 Program startup (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.
- ↑7.21.7.9 The puts function (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.
- ↑5.1.2.2.3 Program termination (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.
- ↑7.22.4.4 The exit function (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.
- ↑7.21.6.1 The fprintf function (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.
- ↑5.2.2 Character display semantics (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.
- ↑7.21.7.6 The getchar function (англ.) WG14 N1570 Committee Draft. ISO/IEC (2011-04-12). Проверено 2012-11-19 г.
- Страницы с устаревшим атрибутом подсветки синтаксиса «enclose»
- Язык Си в примерах
Структура программы на языке Си
Программа на языке Си состоит из одной или более подпрограмм, называемых функциями .
Язык Си является блочно-структурированным. Каждый блок заключается в фигурные скобки <> .
Основным блоком в программе консольного приложения на языке Си является главная функция, имеющая имя main() .
Каждое действие в языке Си заканчивается символом «точка с запятой» — ; . В качестве действия может выступать вызов функции или осуществление некоторых операций.
Имя функции — это коллективное имя группы описаний и операторов, заключенных в блок (фигурные скобки). За именем функции в круглых скобках указываются параметры функции.
Комментарии в языке Си
В языке Си для комментариев используются символы
Вся последовательность, заключенная между этими символами, является комментарием.
Это удобно для написания многострочных комментариев:
int a; /* целая
переменная */
В дополнение к этому, для написания коротких комментариев могут использоваться символы // . При этом комментарием является все, что расположено после символов // и до конца строки:
float b; // вещественная переменная
Главная функция
При выполнении консольного приложения, написанного на языке Си, операционная система компьютера передаёт управление функции с именем main() . Функцию main() нельзя вызывать из других функций программы, она является управляющей.
Следующие за именем функции круглые скобки предназначены для указания параметров (аргументов), которые передаются в функцию при обращении к ней. В данном случае операционная система не передаёт в функцию main() никаких аргументов, поэтому список аргументов в круглых скобках пустой.
Главную функцию можно записать по-разному:
- int main()
- void main() .
Первый вариант используется когда программа запускается из-под операционной системы. При этом перед именем функции указывается тип возвращаемого значения. При обращении к главной функции значение возвращается операционной системе. При этом запись int main() сообщает компилятору о возвращении целочисленного значения, которое необходимо операционной системе и сообщает ей о том, что программа завершилась корректно. В случае корректного завершения возвращается значение 0. Если целочисленное значение отлично от 0, то операционная система понимает, что программа завершилась в аварийном режиме. Для возврата целочисленного значения перед завершением функции добавляется строка
Последняя запись не будет возвращать значения. void main() сообщает компилятору, что функция main() не возвращает никакого значения. Такой вариант записи используется, например, в программах для микроконтроллеров, где не предусмотрен выход из программы, а сама программа состоит из инициализации и бесконечного цикла.
В фигурные скобки заключены описания и операторы.
В общем случае программа может содержать несколько функций. Каждая функция имеет список передаваемых в нее параметров, указанный в круглых скобках, и набор операций, заключенных в блок, ограниченный фигурными скобками.
Пример: Вывод на экран сообщения «Hello, world!» .
#include
int main() // Главная функция
printf( «Hello, world!» ); // Вывод сообщения
getchar(); // Задержка окна консоли
return 0;
>
Результат работы программы: