【发布时间】:2011-11-06 09:05:06
【问题描述】:
我见过使用void main 的D 代码。这合法吗?如果是,返回非void (int) 是否也合法?为什么在语言中允许这样做?
【问题讨论】:
标签: d
我见过使用void main 的D 代码。这合法吗?如果是,返回非void (int) 是否也合法?为什么在语言中允许这样做?
【问题讨论】:
标签: d
main() 函数
对于控制台程序,main() 用作入口点。它在所有模块初始化程序运行后以及任何单元测试运行后被调用。在它返回之后,所有的模块析构函数都会运行。 main() 必须使用以下形式之一声明:
void main() { ... }
void main(char[][] args) { ... }
int main() { ... }
int main(char[][] args) { ... }
所以void main 是合法的。
来自同一个文档,return statement 部分:
return 退出当前函数并提供其返回值。如果函数指定的返回类型不是 void,则表达式是必需的。表达式隐式转换为函数返回类型
因此,似乎没有明确禁止从 void 函数返回某些内容(并且确实这样做编译得很好)。
(你为什么要这样做?)
【讨论】:
void main结束时,D以0退出。当main异常退出时,运行时以适当的错误代码退出。不允许从非 void 函数返回值,并且会在运行时出错。
main()函数的以下版本是合法的:
void main() { ... }
void main(char[][] args) { ... }
int main() { ... }
int main(char[][] args) { ... }
void main 版本与int main 版本相同,如果它们始终返回 0 或抛出。
【讨论】: