Основы языка Си

Структура программы на Си

Последнее обновление: 01.01.2023

Программа на языке Си состоит из набора директив препроцессора, определений функций и глобальных объектов. Директивы препроцессора управляют преобразованием текста до его компиляции. Глобальные объекты определяют используемые данные или состояние программы. А функции определяют поведение или действия программы. Простейшая программа на Си, которая была определена в прошлых темах:

#include <stdio.h>
int main(void)
{
	printf("Hello METANIT.COM! \n");
	return 0;
}

Инструкции

Простейшим строительным элементом программы на Си являются инструкции (statements). Каждая инструкция выполняет определенное действие. В конце инструкций в языке Си ставится точка с запятой (;). Данный знак указывает компилятору на завершение инструкции. Например:

printf("Hello METANIT.COM!");

Вызов функции printf, которая выводит на консоль строку "Hello METANIT.COM!" является инструкцией и завершается точкой с запятой.

Набор инструкций может представлять блок кода. Блок кода оформляется фигурными скобками, инструкции, составляющие тело этого блока, помещаются между открывающей и закрывающей фигурными скобками:

{
	printf("Hello METANIT.COM!");
	printf("Bye world!");
}	

В этом блоке кода две инструкции. Обе инструкции представляют вызов функции printf() и выводят определенную строку на консоль.

Директивы препроцессора

Для вывода данных на консоль в примере выше используется функция printf(), но чтобы использовать эту функцию, чтобы она вообще стала нам доступна в программе на Си, необходимо в начале файла с исходным кодом подключать заголовочный файл stdio.h с помощью директивы include.

Директива include является директивой препроцессора. Кроме данной include есть еще ряд директив препроцессора, например, define.

Каждая директива препроцессора размещается на одной строке. И в отличие от обычных инструкций языка Си, которые завершаются точкой с запятой ; , признаком завершения препроцессорной директивы является перевод на новую строку. Кроме того, директива должна начинаться со знака решетки #.

Непосредственно директива "include" определяет, какие файлы надо включить в данном месте в текст программы. По умолчанию мы можем подключать стандартные файлы из каталога так называемых "заголовочных файлов", которые обычно поставляются вместе со стандартными библиотеками компилятора. И файл "stdio.h" как раз является одним из таких заголовочных файлов.

Вообще сам термин "заголовочный файл" (header file) предполагает включение текста файла именно в начало или заголовок программы. Поэтому заголовочные файлы подключаются, как правило, в начале исходного кода. Кроме того, заголовочный файл должен быть подключен до вызова тех функций, которые он определяет. То есть, к примеру, файл stdio.h хранит определение функции printf, поэтому этот файл необходимо подключить до вызова функции printf.

Но в целом директивы препроцессора необязательно должны быть размещены в начале файла.

При компиляции исходного кода вначале срабатывает препроцессор, который сканирует исходный код на наличие строк, которые начинаются с символа #. Эти строки расцениваются препроцессором как директивы. И на месте этих директив происходит преобразование текста. Например, на месте директивы #include <stdio.h> вставляется код из файла stdio.h.

Функция main

Стартовой точкой в любую программу на языке Си является функция main(). Именно с этой функции начинается выполнение приложения. Ее имя main фиксировано и для всех программ на Си всегда одинаково.

Функция также является блоком кода, поэтому ее тело обрамляется фигурными скобками, между которыми идет набор инструкций.

Стоит отметить, что в разной литературе и примерах можно встретить модификации этой функции. В частности, вместо определения выше мы могли бы написать по другому:

#include <stdio.h>
void main()
{
	printf("Hello METANIT.COM!");
}

или

#include <stdio.h>
int main()
{
	printf("Hello METANIT.COM!");
	return 0;
}

Использование этих определений не было бы ошибкой, и программа также вывела бы строку "Hello METANIT.COM" на консоль. И для большинства компиляторов это было бы нормально.

Комментарии

Программа может сопровождаться комментариями. Комментарии содержат описание программы, характеристики кода. При компиляции комментарии не учитываются и не оказывают никакого влияние на работу программы. В то же время они дают программисту понимание того, как работает код.

В Си можно использовать два типа комментариев: блочный и строчный. Блочный заключается между символами /* текст комментария */. Он может размещаться на нескольких строках. Например:

#include <stdio.h>

/* Функция main выводит 
	на консоль строку Hello World */
int main(void)
{
	printf("Hello METANIT.COM! \n");
	return 0;
}

Строчный комментарий помещается на одной строке после двойного слеша:

#include <stdio.h>		// подключаем заголовочный файл stdio.h

int main(void)					// определяем функцию main
{								// начало функции
	printf("Hello METANIT.COM!");		// выводим строку на консоль
	return 0;					// выходим из функции
}								// конец функции
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850