Может основной () функциональный возврат дважды?

Может main() функция в программе C возвращает a double тип данных?

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

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

14
задан roottraveller 11 September 2017 в 11:43
поделиться

6 ответов

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

См. Здесь .

7
ответ дан 1 December 2019 в 14:43
поделиться

Я не знаю, что это будет значить, если 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
$
1
ответ дан 1 December 2019 в 14:43
поделиться

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

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

0
ответ дан 1 December 2019 в 14:43
поделиться

Из 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

3
ответ дан 1 December 2019 в 14:43
поделиться

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

0
ответ дан 1 December 2019 в 14:43
поделиться

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

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

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

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

1
ответ дан 1 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: