是否存在与SubSystem关联的#define

时间:2011-01-29 20:18:06

标签: c++ visual-studio

我正在使用宏创建main,并且需要能够在编译时检查所选的子系统,/ SUBSYSTEM:WINDOWS或/ SUBSYSTEM:CONSOLE,以便生成适当的主函数。是否有#define我可以检查完成此操作吗?

3 个答案:

答案 0 :(得分:12)

_CONSOLE应该为你做的伎俩 如果您真的想要走这条路线,也可以使用#pragma comment( linker, "/subsystem:windows" )#pragma comment( linker, "/subsystem:console" )选择子系统。

答案 1 :(得分:5)

如果您想为图书馆的用户(或其他用户)轻松做些事情,您可以从宏中生成WinMainmain。默认情况下,链接器将控制台应用程序设置为从main开始,将win32应用程序设置为从WinMain开始。另一个“主要”功能将被忽略。

(假设其余代码不使用任何主要函数参数(argcargvhInstance等),如果它可以同时使用它们。 )

可以使用_CONSOLE定义,但它不会自动出现;您必须手动将其添加到项目属性中。另一方面,启动符号的选择是自动的。所以只提供这两个功能,并让链接器选择,可能会让生活更轻松,因为项目创建者不需要设置任何东西,并且确实可以从Windows切换到控制台应用程序(可能甚至是每个配置)而不必任何东西。

答案 2 :(得分:3)

这不是它真正起作用的方式。您必须在控制台应用程序与本机Windows应用程序中编写截然不同的代码。在控制台应用程序中,您使用printf或cout来生成输出,如果对鼠标有任何用处,则没有太多用处。本机Windows应用程序需要一个消息循环并创建一个窗口,该窗口过程检测WM_PAINT消息以更新窗口。等等。

但是你可以编写兼具两者的代码。只需编写main()和WinMain()函数,CRT就会自动调用正确的函数。