Использование `void main` в D - PullRequest
8 голосов
/ 06 ноября 2011

Я видел D-код, который использует void main.Это законно?Если да, то возврат не-void (int) также является законным?Почему это разрешено на языке?

Ответы [ 2 ]

11 голосов
/ 06 ноября 2011

Из справочника по языкам D

main () Функция

Для консольных программ main () служит точкой входа. Он вызывается после запуска всех инициализаторов модуля и после выполнения любых тестов модулей. После возвращения все деструкторы модуля запускаются. main () должен быть объявлен с использованием одной из следующих форм:

void main() { ... }
void main(char[][] args) { ... }
int main() { ... }
int main(char[][] args) { ... }

То есть void main законно.

Из тех же документов оператор возврата часть:

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

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

(Почему вы хотите это сделать?)

0 голосов
/ 24 июля 2012

Следующие версии функции main() являются законными:

void main() { ... }
void main(char[][] args) { ... }
int main() { ... }
int main(char[][] args) { ... }

Версии void main совпадают с версиями int main, если они всегда возвращают 0 или throw.

...