Возвращаемый тип
Возвращаемый тип функции задает размер и тип значения, возвращаемого функцией, и соответствует спецификатору типа в приведенном ниже синтаксисе.
Синтаксис
определение-функции:
спецификаторы-объявления необ последовательность-атрибутов необ декларатор список-объявлений необ составной-оператор/* Компонент последовательность-атрибутов относится только к системам Microsoft */
спецификаторы-объявления:
спецификатор-класса-хранения спецификаторы-объявления необспецификатор-типа спецификаторы-объявления необ
квалификатор-типа спецификаторы-объявления необ
спецификатор-типа:
voidchar
short
целое число
long
float
double
signed
без знака
спецификатор-struct-или-union
спецификатор-enum
имя-typedef
Компонент спецификатор-типа может задавать любой базовый тип, тип структуры или тип объединения. Если спецификатор-типа не включен, предполагается возвращаемый тип int.
Возвращаемый тип, указанный в определении функции, должен соответствовать возвращаемому типу в объявлениях функций в любом другом месте программы. Функция возвращает значение при выполнении оператора return, содержащего выражение. Выражение вычисляется, преобразуется в тип возвращаемого значения (при необходимости) и осуществляется возврат в точку, где была вызвана функция. Если функция объявляется с типом возвращаемого значения void, оператор return, содержащий выражение, выдает предупреждение и выражение не вычисляется.
В приведенных ниже примерах показываются возвращаемые значения функции.
typedef struct
{
char name[20];
int id;
long class;
} STUDENT;
/* Return type is STUDENT: */
STUDENT sortstu( STUDENT a, STUDENT b )
{
return ( (a.id < b.id) ? a : b );
}
В этом примере определяются тип STUDENT с помощью объявления typedef, а также функция sortstu, чтобы иметь возвращаемый тип STUDENT. Функция выбирает и возвращает один из двух своих аргументов структуры. В последующих вызовах этой функции компилятор проверяет, что аргументы имеют тип STUDENT.
Примечание
Эффективность можно увеличить путем передачи указателей на конкретную структуру, а не на всю структуру.
char *smallstr( char s1[], char s2[] )
{
int i;
i = 0;
while ( s1[i] != '\0' && s2[i] != '\0' )
i++;
if ( s1[i] == '\0' )
return ( s1 );
else
return ( s2 );
}
В этом примере определяется функция, возвращающая указатель на массив символов. Функция принимает в качестве аргументов две строки (два массива) символов и возвращает указатель на более короткую из них. Указатель на массив указывает на первый из элементов массива и имеет его тип; таким образом, возвращаемый тип функции — указатель на тип char.
Объявлять функции с возвращаемым типом int перед их вызовом не требуется, хотя рекомендуется использовать прототипы, чтобы для аргументов и возвращаемых значений включалась правильная проверка типа.