Программирование >>  Перегруженные имена функций и идентификаторы 

1 2 [ 3 ] 4 5 6 ... 210


Директивы исходного файла относятся только к этому исходному файлу и файлам, включающим его (посредством #include). Кроме того, каждая директива относится только к части файла, которая следует за ней. Если множество директив должно относиться ко всей исходной программе, то все исходные файлы должны содержать эти директивы.

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

В нижеследующем примере исходная программа состоит из двух исходных файлов. Функции main и max представлены в отдельных файлах. Функция main использует функцию max при своем выполнении.

/***********************************************

Sourse file 1 - main function

***********************************************/

#define ONE 1

#define TWO 2 #define THREE 3

extern int max(int, int); /* Function declaration */ main () /* Function definition */ int w = ONE, x = TWO, y = THREE;

int z = 0;

z = max(x,y); w = max(z,w);

/*************************************************

Sourse file 2 - max function

*************************************************/

int max(a,b) /* Function definition */

int a, b;

if ( a > b )

return (a);

else

return (b);

В первом исходном файле функция max объявлена без ее определения. Это объявление известно как forward-объявление. Определение функции main включает вызов функции max.



Строки, начинающиеся с символа номер #, являются директивами препроцессора. Директивы инструктируют препроцессор о замене в первом исходном файле имен ONE, TWO, THREE на соответствующие им значения. Область действия директив не распространяется на второй исходный файл.

Второй исходный файл содержит описание функции max. Это определение соответствует вызовам max из первого исходного файла.

Выполнение программ

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

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

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

Например, они могут быть переданы из командной строки.

Соглашение Си требует, чтобы первые два параметра функции main назывались argc и argv.

Параметр argc определяет общее число аргументов, передаваемых функции main. Параметр argv объявляется как массив указателей, каждый элемент которого ссылается на строковое представление аргумента, передаваемого функции main. Третий параметр функции main (если он есть) традиционно



задается с именем envp. Однако Си не требует этого имени. Параметр envp - это указатель на массив указателей строковых величин, которые определяют окружение, в котором выполняется программа.

Операционная система поддерживает передачу значений для argc, argv и envp параметров, а пользователь поддерживает задание значений фактических параметров для функции main. Соглашение о передаче параметров в большей степени определяется операционной системой, чем самим языком Си.

Формальные параметры функции должны быть объявлены во время описания функции.

Время жизни и Видимость

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

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

Блок - это составной оператор. Составные операторы состоят из объявлений и операторов.

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

Объявления и определения внутри блоков находятся на внутреннем уровне. Объявления и определения вне блоков находятся на внешнем уровне. Переменные и функции могут быть объявлены как на внешнем уровне, так и на внутреннем.



1 2 [ 3 ] 4 5 6 ... 210

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика