Возможный дубликат:
Какова правильная декларация основного?
Я работаю над своими навыками C, и я заметил, что
int main (int argc, char * argv [])
и
return (EXIT_SUCCESS)
вместо
int main() и return 0
Почему это?
Возможный дубликат:
Какова правильная декларация основного?
Я работаю над своими навыками C, и я заметил, что
int main (int argc, char * argv [])
и
return (EXIT_SUCCESS)
вместо
int main() и return 0
Почему это?
Если вы проигнорируете список аргументов, разумно и разумно использовать:
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 Запуск программы
¶1 Функция, вызванная при запуске программы, называется
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 Окончание программы
¶1 Если возвращаемый тип функции
mainявляется типом, совместимым сint, возврат из начальный вызов функцииmainэквивалентен вызову функцииexitсо значением возвращаемый функциейmainв качестве аргумента; 10) достигающий}, который завершает Функцияmainвозвращает значение 0. Если тип возврата не совместим сint, статус завершения, возвращенный в среду хоста, не указан.10) В соответствии с §6.2.4, времена жизни объектов с автоматическим временем хранения, объявленные в
mainзакончится в первом случае, даже если они не были бы в последнем.§7.20.4.3 Функция выхода
¶5 Наконец, управление возвращается в среду хоста. Если значение статуса равно нулю или EXIT_SUCCESS, форма реализации успешного успешного завершения вернулся. Если значением статуса является EXIT_FAILURE, форма, определяемая реализацией статуса неудачного завершения возвращается. В противном случае возвращается статус от реализации.
Кроме того: обратите внимание, что в §5.1.2.2.3 четко указано, что стандарт C позволяет реализации допускать типы возврата для main(), отличных от int (в отличие от стандарта С++, который явно запрещает тип возврата, отличный от int). Однако, как справедливо указывает Jens, возвращаемый тип не int из main разрешен только в том случае, если реализация явно документирует, что это разрешено, и документация, вероятно, установит ограничения на то, что разрешено.
 int main (int argc, char * argv []) предназначен для тех случаев, когда вы хотите использовать аргументы командной строки.
 EXIT_SUCCESS является просто a #define, более наглядным, чем 0.
 int main( int argc, char *argv[] ) позволяет пользователю вводить аргументы при выполнении программы, т.е. текст, который вы записываете в консоли после имени программы.
 return (EXIT_SUCCESS) в случае O.S. не ожидает 0 как значения успешного выхода: это будет любое другое значение, но в большинстве случаев EXIT_SUCCESS равно 0.
Операционные системы могут отличаться тем, как программа указывает на успешную работу. Макрос EXIT_SUCCESS идеально расширяется до значения, соответствующего системе, с которой скомпилирована программа.
(Две вещи, которые вы просите, не имеют ничего общего друг с другом.)
Чтобы ответить на свой первый вопрос: Наличие int main() означает, что программа не принимает аргументы командной строки. Когда он принимает два аргумента, argc - это счетчик аргументов (он всегда будет больше или равен единице, так как первым аргументом будет путь или имя самой программы), а argv - список аргументов.
Чтобы ответить на второй вопрос: EXIT_SUCCESS гарантированно будет интерпретироваться как базовая операционная система.