Стили основных функций в Си

Возможный дубликат:
Что такое правильное объявление основного?

Я работаю над своими навыками C, и я заметил, что

int main( int argc, char *argv[])

а также

возврат (EXIT_SUCCESS)

вместо

int main() и вернуть 0

Почему это?

5 ответов

Решение

Если вы собираетесь игнорировать список аргументов, разумно и целесообразно использовать:

int main(void) { ... }

Стандарты благословляют это использование так же как тот с аргументами. Вы получаете предупреждение от GCC, если вы компилируете с -Wstrict-prototypes и не включать void поэтому я пишу void, С ++ здесь другой.

Что касается return EXIT_SUCCESS; в целом, кажется, что это мало что дает; Я продолжаю писать return 0; в конце main() функция, даже если C99 позволяет вам пропустить любой возврат там (и тогда он ведет себя так, как будто вы написали return 0;).

ISO / IEC 9899: 1999

§5.1.2.2.1 Запуск программы

Called1 Функция, вызываемая при запуске программы, называется main, Реализация не объявляет прототип для этой функции. Он должен быть определен с типом возврата int и без параметров:

int main(void) { /* ... */ }

или с двумя параметрами (упоминается здесь как argc а также argv хотя могут использоваться любые имена, так как они являются локальными для функции, в которой они объявлены):

int main(int argc, char *argv[]) { /* ... */ }

или эквивалент; 9) или каким-либо другим способом, определяемым реализацией.

9) Таким образом, int может быть заменено именем typedef, определенным как int или тип argv можно записать как char ** argv, и так далее.

§5.1.2.2.3 Прекращение программы

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

10) В соответствии с §6.2.4 время жизни объектов с автоматическим сроком хранения, объявленным в main закончится в первом случае, даже если они не будут иметь во втором.

§7.20.4.3 Функция выхода

Finally5 Наконец, управление возвращается в среду хоста. Если значение статуса равно нулю или EXIT_SUCCESS, возвращается определяемая реализацией форма успешного завершения статуса. Если значением состояния является EXIT_FAILURE, возвращается определяемая реализацией форма неудачного завершения статуса. В противном случае возвращаемый статус определяется реализацией.

Отметим, что §5.1.2.2.3 ясно указывает, что стандарт C позволяет реализации разрешать типы возврата для main() Кроме как int (в отличие от стандарта C++, который явно запрещает тип возвращаемого значения, кроме int ). Однако, как справедливо отмечает Jens Gustedt, int тип возврата из main допускается только в том случае, если реализация явно документирует, что это разрешено, и документация, вероятно, будет устанавливать ограничения на то, что разрешено.

(Две вещи, которые вы просите, не имеют ничего общего друг с другом.)

Чтобы ответить на ваш первый вопрос: наличие int main() просто означает, что программа не принимает аргументы командной строки. Когда он принимает два аргумента, argc - это число аргументов (оно всегда будет больше или равно единице, поскольку первым аргументом будет путь или имя самой программы), а argv - это список аргументов.

Чтобы ответить на ваш второй вопрос: базовая операционная система гарантированно интерпретирует EXIT_SUCCESS как успех.

int main (int argc, char * argv []) для того, когда вы хотите принять аргументы командной строки.

EXIT_SUCCESS это просто #define это более наглядно, чем 0,

Операционные системы могут отличаться в том, как программа указывает на успешную работу. Макрос EXIT_SUCCESS в идеале расширяется до значения, соответствующего системе, для которой составляется программа.

http://en.wikipedia.org/wiki/Exit_status

int main( int argc, char *argv[] ) позволяет пользователю вводить аргументы при выполнении программы, т. е. текст, который вы пишете в консоли после имени программы.

return (EXIT_SUCCESS) в случае, если ОС не ожидает 0 в качестве значения успешного завершения: это будет любое другое значение, но в большинстве случаев EXIT_SUCCESS равно 0.

Другие вопросы по тегам