Может main()
функция в программе C возвращает a double
тип данных?
Если Да, как и почему?
Если нет, почему?
Да. Согласно стандарту C функция main () должна возвращать значение int
. Но не должен .
Я не знаю, что это будет значить, если main
вернет double. В любом случае вот что происходит с gcc:
double main ()
{
return 0.0;
}
$ cc double.c double.c: In function 'main': double.c:2: warning: return type of 'main' is not 'int' $ ./a.out $ echo $? 255 $
Если вы находитесь в размещенной среде (т. Е. Обычно на ПК), тип возвращаемого значения фиксируется, как уже было сказано. Вы можете вернуть другой тип значения при работе в автономной среде. Автономная среда обычно используется при программировании для микроконтроллеров, поскольку в ней нет операционной системы (вы создаете один большой двоичный файл, который запускается непосредственно на оборудовании). Однако в этом случае обычным прототипом для main будет void main (void)
.
Но какой смысл возвращать другой тип, например double
? Если вызывающая сторона (то есть операционная система) не может что-то сделать с возвращаемым значением, это бессмысленно, и поскольку у вызывающей стороны нет возможности узнать о типе возвращаемого значения, это должно быть исправлено.
Из C99
5.1.2.2.3 Завершение программы Если тип возврата основной функции - тип совместим с int, возврат от первоначального вызова до основного функция эквивалентна вызову функция выхода с возвращенным значением по главной функции как аргумент; 10) достижение}, которое завершает основную функцию возвращает значение 0. Если возвращаемый тип не совместим с int, завершение статус возвращен хосту среда не указана
Ссылка здесь - 5.1.2.2.3 Завершение программы http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf
Функция с именем main, которая действует как точка входа в программу в размещенной реализации C, должна возвращать int. Можно написать функцию с именем main, которая возвращает значение типа double. Для этого вы делаете его статичным, а затем покупаете себе бронежилет и, вероятно, нанимаете вооруженных охранников; Если кому-то придется поддерживать такое чудовище, они вам понадобятся.
C говорит, что это совершенно нормально. POSIX, с другой стороны, хочет получить целое число от 0 до 255. Вообще, main()
должна возвращать значение EXIT_SUCCESS
или EXIT_FAILURE
, если только специально не задан статус, который не является ни тем, ни другим, но все еще находится между 0 и 255, чтобы сделать статус значимым.
Например, возврат 114 может сообщить вызывающему init скрипту о некотором состоянии, которое может быть исправлено скриптом.
Если в POSIX OS вы попытаетесь вернуть 3.14
из main()
, вызывающий процесс почти всегда увидит 255
.
Я не уверен насчет других операционных систем, но в целом - то, что позволит вам C, не всегда совпадает с тем, что позволит вам сама ОС :) Это совсем не специфично для POSIX.