Может ли функция main () возвращать значение double? - PullRequest
14 голосов
/ 23 мая 2010

Может ли функция main() в программе на С вернуть тип данных double?

Если Да , как и почему?

Если Нет , почему?

Ответы [ 6 ]

7 голосов
/ 23 мая 2010

Да. Согласно стандарту C, main () должен возвращать значение int. Но не должен .

Смотрите здесь .

3 голосов
/ 23 мая 2010

от C99

5.1.2.2.3 Завершение программы Если тип возврата основной функции тип совместимый с int, возврат от первоначального звонка на главный Функция эквивалентна вызову функция выхода с возвращенным значением по основной функции как его аргумент; 10) достижение завершает основную функцию возвращает значение 0. Если тип возвращаемого значения не совместим с int, прекращение статус возвращен на хост среда не указана

Ссылка здесь - 5.1.2.2.3 Завершение программы http://www.open -std.org / ОТК1 / SC22 / WG14 / WWW / Docs / n1256.pdf

1 голос
/ 23 мая 2010

C говорит, что это прекрасно.POSIX, с другой стороны, хочет получить целое число от 0 до 255. Как правило, main() должен возвращать значение EXIT_SUCCESS или EXIT_FAILURE, если специально не установлен статус, который не является ни, но все же находится в диапазоне от 0 до 255, чтобысделать состояние осмысленным.

Например, возвращение 114 может сообщить вызывающему скрипту о некотором условии, которое может быть исправлено скриптом.

Если в ОС POSIX вы пытаетесь вернуться 3.14 из main(), вызывающий процесс почти всегда будет видеть 255.

Я не уверен насчет других операционных систем, но в целом - то, что C позволит вам сойти с рук, не всегда соответствует тому, с чем сама ОС позволит вам сойти с рук :) Это совсем не такСпецифичный для POSIX.

1 голос
/ 23 мая 2010

Я не знаю, что бы это значило, если бы 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
$
0 голосов
/ 23 мая 2010

Если вы находитесь в размещенной среде (т. Е. Обычно на ПК), тип возвращаемого значения является фиксированным, как уже было сказано. Вы можете вернуть другой тип значения, если работаете в автономной среде. При программировании для микроконтроллеров обычно используется автономная среда, поскольку вокруг нет операционной системы (вы создаете один большой двоичный файл, который запускается непосредственно на оборудовании). Однако в этом случае обычным прототипом для main будет void main(void).

Но какой смысл возвращать другой тип, такой как double? Если вызывающая сторона (то есть операционная система) не может что-то сделать с возвращаемым значением, это бессмысленно, и поскольку вызывающий не может знать тип возвращаемого значения, его необходимо исправить.

0 голосов
/ 23 мая 2010

Функция с именем main, которая действует как точка входа программы в размещенной реализации C, должна возвращать int. Можно написать a функцию с именем 'main', которая возвращает double. Для этого вы делаете его статичным, а затем покупаете себе бронежилет и, вероятно, нанимаете вооруженных охранников; если кому-то нужно поддерживать такое чудовище, оно вам понадобится.

...