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

В языке Си исходные файлы бывают двух типов:

· заголовочные, или h-файлы;

· файлы реализации, или Cи-файлы.

Имена заголовочных файлов имеют расширение ".h". Имена файлов реализации имеют расширения ".c" для языка Си и ".cpp", ".cxx" или ".cc" для языка C++.

Заголовочные файлы содержат только описания. Прежде всего, это прототипы функций. Прототип функции описывает имя функции, тип возвращаемого значения, число и типы ее аргументов. Сам текст функции в h-файле не содержится. Также в h-файлах описываются имена и типы внешних переменных, константы, новые типы, структуры и т.п. В общем, h-файлы содержат лишь интерфейсы, т.е. информацию, необходимую для использования программ, уже написанных другими программистами (или тем же программистом раньше). Заголовочные файлы лишь сообщают информацию о других программах. При трансляции заголовочных файлов, как правило, никакие объекты не создаются.

Файлы реализации, или Cи-файлы, содержат тексты функций и определения глобальных переменных. Говоря упрощенно, Си-файлы содержат сами программы, а h-файлы - лишь информацию о программах.

Представление исходных текстов в виде заголовочных файлов и файлов реализации необходимо для создания больших проектов, имеющих модульную структуру. Заголовочные файлы служат для передачи информации между модулями. Файлы реализации - это отдельные модули, которые разрабатываются и транслируются независимо друг от друга и объединяются при создании выполняемой программы.

В общем случае программа на языке Си имеет следующую структуру:

· раздел описания подключаемых библиотек;

· функция main;

· раздел описания процедур и функций.

Обязательным являются все разделы.

В разделе описания подключаемых библиотек после ключевого слова #include указывается имя подключаемого к программе библиотечного модуля. Имя модуля заключается в треугольные кавычки - <имя модуля>. В этих модулях содержатся необходимые программе стандартные и пользовательские процедуры и функции, например, «#include<stdio.h>». В этом примере приведен важнейший модуль, в котором находятся основные стандартные процедуры и функции ввода/вывода. В дальнейших примерах программ будем применять эту конструкцию.

Любая программа, каков бы ни был ее размер, состоит из одной или более "функций", указывающих фактические операции компьютера, которые должны быть выполнены. В языке Си - это функция main. Обычно функциям можно давать любые имена, но main - это особое имя; выполнение программы начинается сначала с функции main. Это означает, что каждая программа должна в каком-то месте содержать функцию с именем main. Для выполнения определенных действий функция main обычно обращается к другим функциям, часть из которых находится в той же самой программе, а часть - в библиотеках, содержащих ранее написанные функции.

В разделе описания процедур и функций описываются нестандартные (пользовательские) процедуры и функции. Процедура или функция – это подпрограмма, т.е. специальным образом оформленная часть программы, которая выполняет необходимое в программе действие. Подробнее о процедурах и функциях рассказывается в разделе 8.

Обобщая все вышесказанное, структура программы на языке Си в упрощенном виде выглядит следующим образом:

#include <модуль 1>

#include <модуль 2>

. . .

#include <модуль n> //список подключаемых модулей

void main() //функция MAIN

{

<операторы> //выполняемые операторы

}

int <имя процедуры/функции> // раздел описания процедур и функций

{

<основная часть процедуры/функции >;

}

Как видно из приведенного примера, текст программы на языке Си состоит из строк. Символы в строке записываются на одном уровне без надстрочных и подстрочных индексов. Для разделения некоторых конструкций языка используются пробелы. Пробелы формируются с помощью клавиш «пробел» и «Tab» на клавиатуре компьютера. Пробелы нельзя использовать внутри имён, чисел, специальных символов и служебных слов. По крайней мере 1 пробел должен быть между двумя последовательными именами, числами и служебными словами. Во всех других случаях наличие или отсутствие пробела не влияет на смысл программы. В том месте, где можно использовать 1 пробел, можно использовать любое количество пробелов. Конец строки считается пробелом, поэтому текст программы можно прерывать и переносить на другую строку в любом месте, где можно использовать пробел. Пробелы позволяют выделять структурные блоки программы и делают ее более наглядной, программа без такого структурирования плохо читаема и не понятна. Поэтому существует правило табулирования текста программы – выделения с помощью пробелов, символов табуляции и переводов строк вложенных блоков, циклов, условий.

Операторы разделяются между собой символом точка с запятой («;»). Пустым оператором считается оператор, который не выполняет никаких действий. На языке Си это может быть пробел с последующей точкой запятой.

Для пояснения текста программы используется комментарии.

Комментарии имеют вид (//текст) или (/*текст*/). Комментарий может охватывать несколько строк (используется форма «/*текст*/»), либо помещаться в одной строке (точнее, до конца строки), тогда используется форма: «// комментарий до конца строки».

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

Имена объектов в программе

Имена (идентификаторы) – условные обозначения для используемых в программе констант, типов, переменных, процедур и функций. Имя начинается с буквы и состоит из букв и цифр, т.е. в виде грамматики:

<имя> =:: <буква>{<буква> | <цифра>},

или в виде синтаксической диаграммы (рис.25):

Структура программы на языке Си - student2.ru

Примечание:

1. Во многих реализациях языка количество символов в имени ограничено.

2. В качестве имен нельзя использовать служебные слова языка Си.

3. К буквам относится также символ «_» (подчёркивание).

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

Приведем перечень некоторых стандартных имён:

abs – абсолютное значение целого;

acos – арккосинус;

asctime – дать время;

atan, atan2 – арктангенс;

atof, atoi, atol – преобразовать в плавающее;

close – закрыть файл;

creat – создать файл;

difftime – определить отрезок времени;

div – делить;

ecvt – преобразовать число в строку;

exit, _exit – завершить выполнение программы;

exp – экспонента;

fclose – закрыть файл;

fcvt – преобразовать double в строку с фиксированной точкой;

feof – проверка признака конца файла;

fgetc – взять байт из файла;

fgets – взять строку из файла;

filesize – дать размер файла;

findfirst, findnext – поиск файлов по шаблону;

floor – целая часть;

fmod – остаток от деления двух чисел;

fopen – открыть файл;

fprintf – форматный вывод в файл;

fputc – запись байта в файл;

fputs – запись строки в файл;

fread – читать из файла;

free – освободить память;

freopen – открыть файл повторно;

frexp – экспоненциальное представление;

fscanf – форматный ввод из файла;

fseek – позиционировать файл;

ftell – дать позицию в файле;

fwrite – писать в файл;

getc, getchar, getche, getch – взять байт из файла;

getcwd – дать текущий каталог;

gets – ввод строки;

index – найти литеру в строке;

inp, inpw – ввод из порта;

itoa – представление целого;

kbhit – проверка ввода с клавиатуры;

labs – абсолютное значение длинного;

ldexp – экспонента;

ldiv – деление чисел типа long;

localtime – дать местное время;

log, log10 – логарифм;

lseek – изменить позицию в файле;

mkdir – создать каталог;

mktime – преобразовать время;

modf – дробная и целая часть числа;

open – открыть файл;

outp, outpw – вывод в порт;

pow – степень;

printf, fprintf, sprintf – форматный вывод;

puts – вывод строки в файл;

rand – случайная величина;

read – читать блок из файла;

rename – переименовать файл;

rewind – установить указатель файла в начало;

rmdir – удалить каталог;

scanf – форматный ввод;

sin, sinh – синус, синус гиперболический;

spawn – создать процесс;

sprintf – форматный вывод в буфер;

sqrt – квадратный корень;

srand – инициализация случайной величины;

sscanf – форматный вывод из буфера;

strlen – дать длину строки;

strlwr – привести к нижнему регистру;

strspn – дать длину совпадающей подстроки;

strstr – найти подстроку;

time – дать время;

vprintf, vfprintf, vsprintf – форматный вывод;

write – писать в файл.

Наши рекомендации