2016-6-1日注:此种方法并不适用于VS2012,在VS2012中屏蔽CMD的方法可以参见我的另一篇博文,链接如下:
https://blog.csdn.net/wenhao_ir/article/details/51554944
有时我们的exe程序并不需要CMD窗口打印输出信息,所以我们需要屏蔽它。那么怎么屏蔽它呢?
在VS2008下利用预编译指令#pragma comment就可以屏蔽CMD窗口,下面是具体方法。
咱们只需要在cpp文件的预编译部分加上下面这个语句即可实现对CMD控制台的屏蔽~
#pragma comment(linker,"/subsystem:windows /ENTRY:mainCRTStartup")
或者也可以把参数加上双引号:
#pragma comment(linker,"/subsystem:\"windows\"/entry:\"mainCRTStartup\"") 注意,其中的反斜杠是转义字符!
如下图所示:
下面补充说明下这个语句~
#pragma 是C和C++的预编译指令,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作,说白了就是对编译器作设置的。
comment()中的参数挺多,具体有哪些参数,请大家自行百度。
下面说说linker的参数语句
"/subsystem:windows /ENTRY:mainCRTStartup"
操作系统装载应用程序后(比如我们利用VC生成的exe),做完初始化工作就转到程序的入口点执行。程序的默认入口点实际上是由连接程序设置的,不同的连接器选择的入口函数也不尽相同。在VC下,连接器对“控制台类型的程序”设置的入口函数是 mainCRTStartup,mainCRTStartup 运行后再调用你自己编写的 main 函数。
虽然“控制台类型的程序”的入口函数都是 mainCRTStartup,但是具体设置哪个入口点是由连接器的“/subsystem:”选项参数确定的,它告诉操作系统如何运行编译生成的.EXE文件。可以指定四种方 式:“CONSOLE|WINDOWS|NATIVE|POSIX”如果这个选项参数的值为“WINDOWS”,则表示该应用程序运行时不需要控制台,所以以上的设置就屏蔽了CMD控制台。
下图是没有写屏蔽语句时的截图:
可见,是有CMD控制产生的。
下图是写上屏蔽语句时的截图:
可见是没有控制台产生的。