Лекция 3: Язык C: начальные сведения
Я водку пробовал однажды, она не утолила жажды.
Общая характеристика языка C
C — один из наиболее популярных языков программирования. Его синтаксис стал основой для многих других языков, таких как C++, Java, JavaScript, C# и др. Программы на C хорошо переносимы между различными платформами, так как компиляторы существуют практически для всех типов процессоров.
Преимущества
- Сочетает черты языков низкого и высокого уровней.
- Высокая производительность и переносимость.
- Используется для разработки операционных систем, драйверов и прошивок микроконтроллеров.
История создания
C был разработан как замена ассемблера для упрощения программирования на низком уровне. Основные области применения языка C — ядра операционных систем и микроконтроллеры.
Структура программы на языке C
Программа на C состоит из одной или нескольких функций, причём обязательной является функция main()
.
Общая структура программы выглядит так:
<директивы препроцессора>
<определение типов пользователя>
<описание прототипов функций>
<определение глобальных переменных>
<функции>
Пример простой программы:
#include <stdio.h>
int main(void) {
printf("Hello, World!\n");
return 0;
}
Основные элементы программы
- Директивы препроцессора: Указания для компилятора перед началом компиляции (например,
#include <stdio.h>
). - Функция
main()
: Начальная точка выполнения программы. Возвращает целое число, обычно 0 при успешном завершении.
Директивы препроцессора
Препроцессор обрабатывает исходный код перед компиляцией. Директивы препроцессора начинаются с символа #
и указывают компилятору, какие действия нужно выполнить.
Основные директивы
#include
: Подключает заголовочные файлы.#define
: Создаёт макроопределения.
Пример макроопределений:
printf(HELLOMSG);
double area = PI * radius * radius;
Зачем нужны макросы?
Макросы упрощают поддержку кода и позволяют избежать повторений.
Функции в языке C
Функция — это подпрограмма, выполняющая определённые действия. Функции могут быть системными (например, printf
, scanf
) или пользовательскими (написанными программистом).
Преимущества использования функций:
- Повышение модульности программы.
- Возможность повторного использования кода.
- Улучшение читаемости и удобства сопровождения программ.
Пример пользовательской функции для сложения двух чисел:
#include <stdio.h>
int sum(int x, int y) {
return x + y;
}
int main() {
int result = sum(5, 3);
printf("Sum: %d\n", result);
return 0;
}
Возврат значений функцией
Функция возвращает значение с помощью оператора return
. Если функция ничего не возвращает, используется тип void
.
Основные средства ввода-вывода
В языке C нет встроенных операторов ввода-вывода. Для этого используются функции из библиотеки stdio.h
, такие как printf()
и scanf()
.
Форматированный вывод с помощью printf()
#include <stdio.h>
int main() {
int a = 5;
float x = 2.78;
printf("a = %d\nx = %f\n", a, x);
return 0;
}
Управляющие символы:
\n
— перевод строки.\t
— горизонтальная табуляция.
Спецификаторы форматов:
%d
— целое число.%f
— вещественное число с плавающей точкой.%s
— строка.
Форматированный ввод с помощью scanf()
#include <stdio.h>
int main() {
int a;
printf("Введите число: ");
scanf("%d", &a);
printf("Вы ввели: %d\n", a);
return 0;
}
Важно помнить, что функция scanf()
требует указания адреса переменной для сохранения введённого значения (символ &
).
Недостатки функций printf() и scanf()
- Отсутствие проверки типов в printf().
- Риск переполнения буфера в scanf().
- Неинтуитивное поведение scanf() с оставлением символов в буфере.
- Ограниченная поддержка локалей.
Альтернативы
snprintf()
для безопасного форматированного вывода.fgets()
для безопасного ввода строк.sscanf()
для разбора строк.
Компиляция
Язык C является компилируемым. Компилятор преобразует исходный код в машинный код, который может быть исполнен процессором.
Команда для компиляции программы с использованием GCC:
gcc -Wall -g -o hello hello.c
-Wall
— включает все разумные предупреждения компилятора.-g
— добавляет отладочную информацию.-o hello
— задаёт имя выходного файла.
Особенность компиляции с <math.h>
При компиляции программ, использующих библиотеку <math.h>
, необходимо добавлять флаг -lm
для подключения математической библиотеки:
gcc -Wall -g -o example example.c -lm
Интерфейс командной строки (CLI)

Для работы с программами на C в среде Linux используется интерфейс командной строки (CLI). Вы можете запускать терминал и компилировать программы с помощью GCC.
Пример использования CLI:
$ gcc -Wall -g -o hello hello.c
$ ./hello
Hello, World!
Также можно использовать онлайн-эмуляторы терминалов, такие как JSLinux, для выполнения команд в браузере.