Может ли функция main()
в программе C возвращать тип данных double
?
Если Да, как и почему?
Если Нет, почему?
Может ли функция main()
в программе C возвращать тип данных double
?
Если Да, как и почему?
Если Нет, почему?
Да. Согласно стандарту C, main() должен вернуть значение int
. Но не должен.
Из C99
5.1.2.2.3 Окончание программы Если тип возврата основной функции является тип, совместимый с int, возврат от первоначального вызова до основного функция эквивалентна вызову exit с возвращенным значением по своей основной функции аргумент; 10) достижение}, завершает основную функцию, возвращает значение 0. Если тип возврата не является совместим с int, завершение статус, возвращенный хосту среда не определена
Ссылка здесь - 5.1.2.2.3 Окончание программы http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf
C говорит, что это прекрасно. POSIX, с другой стороны, хочет целое число от 0 до 255. Как правило, main()
должно возвращать значение EXIT_SUCCESS
или EXIT_FAILURE
, если специально не устанавливать статус, который не является, но все еще между 0 - 255, чтобы сделать статус значимым.
Например, возврат 114 может сообщить вызывающему init script о некотором условии, которое может быть исправлено с помощью script.
Если в ОС POSIX вы пытаетесь вернуть 3.14
из main()
, вызывающий процесс почти всегда будет видеть 255
.
Я не уверен в других операционных системах, но в целом - то, что C позволит вам уйти, не всегда согласуется с тем, что сама ОС позволит вам уйти:) Это совсем не POSIX.
Я не знаю, что бы это означало, если main
вернулся дважды. В любом случае, вот что происходит с 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 $
Функция named main, которая выступает в качестве точки входа программы в размещенной реализации C, должна возвращать int. Можно написать функцию с именем "main", которая возвращает double. Чтобы сделать это, вы делаете его статичным, а затем покупаете себе пуленепробиваемый жилет и, возможно, нанимаете некоторых вооруженных охранников; если кто-то должен поддерживать такое чудовище, вам понадобятся.
Если вы находитесь в размещенной среде (то есть, как правило, на ПК), тип возвращаемого значения фиксируется, как уже было сказано. Вы можете вернуть другой тип значения, если он работает в автономной среде. Обычно автономная среда обычно используется при программировании для микроконтроллеров, поскольку вокруг нет операционной системы (вы создаете один большой двоичный файл, который запускается непосредственно на аппаратном обеспечении). Однако в этом случае обычным прототипом для main будет void main(void)
.
Но какая точка в возвращении другого типа типа double
? Если вызывающий абонент (то есть операционная система) не может что-то сделать с возвращаемым значением, он бессмысленен, и поскольку для вызывающего абонента нет способа узнать тип возвращаемого значения, он должен быть исправлен.