C ++ main против C main - PullRequest
       30

C ++ main против C main

2 голосов
/ 04 марта 2012

Я читаю документ о C ++ против C. В документе говорится, что C ++ написан плотно по сравнению с C. Один из примеров - C допускает, чтобы main() тип функции был пустым.С другой стороны, C ++ не позволяет этого, и он дал следующее утверждение из стандарта.

В стандарте C ++:

Он должен иметь возвращаемый тип int, но в остальном его тип определяется реализацией.Все реализации должны разрешать оба из следующих определений main:

int main() { /* … */ }

и

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

Стандарт C говорит то же самое, но имеет дополнительный оператор.

Если возвращаемый тип несовместим с int, состояние завершения, возвращаемое в хост-среду, не указывается

, что указывает на то, что разрешение форм, которые не возвращают int, является преднамеренным.

Если у вас есть выражение «тип может быть определен реализацией», не разрешаете ли вы сообществу реализации компилятора C ++ разрешить использование void как типа?

Ответы [ 2 ]

12 голосов
/ 04 марта 2012

И C, и C ++ требуют, чтобы любая реализация языка поддерживала формы int main(void) и int main(int, char**).Однако в стандартах также говорится, что реализация может поддерживать дополнительные формы, и, таким образом, программа, которая использует одну из этих других форм, не автоматически недействительна - скорее, это действительная программа, которая происходит только споддерживаться на определенных платформах.

Единственное различие между C и C ++ в этом отношении заключается в , в котором допускаются альтернативные формы main.В C ++ все формы должны возвращать int, поэтому разрешено изменять только аргументы, и, кроме того, если первые два аргумента формы любой являются int, char**, они должны имеют обычное значение.

C немного более либерально, поскольку допускает любую альтернативную форму main.Таким образом, программа с void main(char, double) является допустимой C-программой, для реализации которой требуется поддержка этой сигнатуры, в то время как она безусловно была бы плохо сформированной C ++.С другой стороны, int main(int, char**, char**) является допустимой сигнатурой для C и C ++, также требующей поддержки реализации, и C ++ ожидает, что первые два аргумента будут иметь обычное значение.

6 голосов
/ 04 марта 2012

C ++

Он должен иметь тип возвращаемого значения int, но в противном случае его тип определяется реализацией.

Это означает, чтотип возвращаемого значения должен быть целым, но параметры для main могут быть определенными реализацией.Таким образом, есть область для параметров, специфичных для реализации, к main, но нет области для отклонения от типа возвращаемого значения int.

C

C является более допустимым для допустимых типов возвращаемыхосновной.Он допускает типы возврата, отличные от int.

...