1. 程式人生 > >/subsystem:windows 與 /subsystem:console

/subsystem:windows 與 /subsystem:console

  作業系統裝載應用程式後,做完初始化工作就轉到程式的入口點執行。程式的預設入口點實際上是由連線程式設定的,不同的聯結器選擇的入口函式也不盡相同。在VC++下,聯結器對控制檯程式設定的入口函式是 mainCRTStartup,mainCRTStartup 再呼叫你自己編寫的 main 函式;對圖形使用者介面(GUI)程式設定的入口函式是 WinMainCRTStartup,WinMainCRTStartup 呼叫你自己寫的 WinMain 函式。而具體設定哪個入口點是由聯結器的“/subsystem:”選項引數確定的,它告訴作業系統如何執行編譯生成的.EXE檔案。可以指定四種方式:“CONSOLE|WINDOWS|NATIVE|POSIX”如果這個選項引數的值為“WINDOWS”,則表示該應用程式執行時不需要控制檯,有關聯結器引數選項的詳細說明請參考 MSDN 庫。 

以下四種組合,可以實現console和windows模式的混合,可以達到不彈出DOS視窗的效果,也可以達到在Windows程式中向控制檯輸出printf資訊了。
#pragma comment( linker, "/subsystem:windows /entry:WinMainCRTStartup" )
#pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" )

#pragma comment( linker, "/subsystem:console /entry:mainCRTStartup" )
#pragma comment( linker, "/subsystem:console /entry:WinMainCRTStartup" )