Справочная система C guide



Содержание


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

extern double ' linfunc();

Замечание. Такое описание не определяет функцию, а только описывает тип возвращаемого значения; оно не нужно, если функция определена в том же файле до ее вызова (см. с. 42).

Пр им ёры

Правильно: extern double linfuncO;

float у;

у = linfunc (3.05, 4.0, le-3), Значение функции перед присваиванием переменной у преобразуется из типа double в тип float.

Неправильно: float х;

float у;

х=3.05;

у = linfunc (х, 4, le-3);

Тип аргументов не соответствует типу параметров, описанных в определении функции, а именно: константа 4 имеет тип int, а не double. В результате аргументы, загруженные в стек, имеют неправильные тип и формат, поэтому значения, выбираемые из стека, бессмысленны и значение, возвращаемое функцией, не определено. Кроме того, если тип функции не описан, то считается, что возвращаемое значение имеет тип int. Поэтому, даже если функция linfunc возвращает правильное значение типа double, выражение, представляющее вызов функции, получит бессмысленное значение типа int (например, старшая половина значения double).

6.3. Функция main

Каждая программа начинает работу с функции main(). Во время выполнения программы можно передавать аргументы через формальные параметры argc и argv функции main. Переменные среды языка оболочки shell передаются программе через параметр env. Пример

/*

* программа печатает значения фактических параметров,

* а затем переменных среды

*/

main (argc, aigv, envp)

int argc; /* число параметров*/

char **argv, /* вектор параметров-строк */

char "envp; /* вектор переменных среды */

{ register int i;

register char **p;

/* печать значений параметров */ for (i = 0, i < argc, i++)

printf("arg %i:%s\n", i, argv [i]);

/* печать значений переменных среды */ for (p = envp; *p != (char*)0; p++) printf ("%s\n", *p);




Содержание  Назад  Вперед