Visual Studio Console(/SUBSYSTEM:CONSOLE)和Windows(/SUBSYSTEM:WINDOWS)之间的区别

mpgws1up  于 7个月前  发布在  Windows
关注(0)|答案(5)|浏览(112)

有人能解释这两个声明之间的区别在Visual Studio 2008中的链接器的属性(请尽可能简单,我是C++世界的新手),提前感谢
编辑:如果可能的话,你能不能请给予我两个小程序显示一下效果

pod7payv

pod7payv1#

/SUBSYSTEM:CONSOLE)用于基于控制台的应用程序。您应该在代码中定义main函数。
/SUBSYSTEM:WINDOWS)用于GUI应用程序。您应该定义WinMain函数。

kxxlusnw

kxxlusnw2#

控制台:控制台窗口显示. WINDOWS -程序启动没有控制台窗口.
已编辑,查看另一个答案。请注意,/SUBSYSTEM标志不影响程序入口点。程序入口点由/ENTRY链接器选项定义。通常/SUBSYSTEM:CONSOLE具有“main”入口点,而/SUBSYSTEM:WINDOWS具有“WinMain”入口点。但也可以使用WinMain入口点和Console窗口创建GUI应用程序。

xtfmy6hx

xtfmy6hx3#

here。VS 2008为你自动化了一些导致混乱的事情。

CONSOLEWin32字符模式应用程序。操作系统为控制台应用程序提供控制台。如果为本机代码定义了main或wmain,为托管代码定义了int main(array ^),或者您完全使用/clr:safe构建应用程序,则CONSOLE为默认值。
WINDOWS应用程序不需要控制台,可能是因为它会创建自己的窗口来与用户交互。如果为本机代码定义了WinMain或wWinMain,或者为托管代码定义了WinMain(HISTANCE *,HISTONCE *,char *,int)或wWinMain(HISTONCE *,HISTONCE *,wchar_t *,int),则WINDOWS是默认值。

axzmvihb

axzmvihb4#

/SUBSYSTEM:CONSOLE会导致一个带有控制台的进程,而/SUBSYSTEM:WINDOWS则不会。

c9x0cxw0

c9x0cxw05#

我在2023年的解决方案,使用SDL 2和VSCode,使用mingw32编译:
对于生产构建,我使用标志-mwindows,它可以防止std::coutprintf在任何地方打印。
为了调试,我将标志-mwindows更改为-Wl,-subsystem,console,以允许在控制台窗口中打印std::coutprintf

相关问题