2011-11-06 71 views
8

我見過使用void main的D代碼。這合法嗎?如果是,則返回非voidint)也合法嗎?爲什麼在語言中允許這樣做?在D中使用`void main`

+0

另請參閱http://stackoverflow.com/questions/3888661/how-can-d-return-0-on-success-and-non-zero-on-failure-if-main-is-void –

回答

11

D Language Reference

main()函數

對於控制檯程序的main()作爲入口點。它在所有模塊初始化器運行之後以及任何單元測試運行之後被調用。它返回後,所有的模塊析構函數都會運行。主()必須使用下列形式之一聲明:

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

所以void main是合法的。

從同一個文檔,return statement部分:

一個返回退出當前功能,並提供了返回值。如果函數指定的返回類型不是無效的,則表達式是必需的。表達式隱式轉換爲函數返回類型

所以看起來,從void函數返回的東西沒有被明確禁止(事實上這樣做編譯得很好)。

(你爲什麼要這麼做,雖然?)

+3

附錄:當'void main'結束時,D以0退出。當'main'由異常退出時,運行時會退出並顯示相應的錯誤代碼。不允許從非void函數返回值,並且會在運行時出錯。 – FeepingCreature

0

main()功能的以下版本都是合法的:

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

void main版本是一樣的int main版本中,如果他們總是返回0或拋出。

相關問題