Is there a #define associated with the SubSystem

前端 未结 3 766
情书的邮戳
情书的邮戳 2021-01-08 00:42

I\'m creating main with a macro and need to be able to check the selected SubSystem at compile time, /SUBSYSTEM:WINDOWS or /SUBSYSTEM:CONSOLE, in order to generate the appro

相关标签:
3条回答
  • 2021-01-08 01:25

    If you are trying to make things easy for users of your library (or whatever it is), you could just generate both WinMain and main from your macro. The linker by default sets console apps to start at main, and win32 apps to start at WinMain. The other "main" function will be ignored.

    (Presumably the rest of the code doesn't use any of the main function arguments (argc, argv, hInstance, etc.), if it's to work with both.)

    The _CONSOLE define could be used, but it doesn't appear automatically; you have to add it manually in to the project properties. The selection of startup symbol, on the other hand, is automatic. So just providing both functions, and letting the linker pick, might make life easier, because the project creator doesn't have to set anything up, and can indeed switch from windows to console app (possibly even per-configuration) without having to do anything.

    0 讨论(0)
  • 2021-01-08 01:25

    That's not how it really works. You have to write dramatically different code in a console app vs a native Windows app. In a console app, you use printf or cout to produce output, don't have much if any use for a mouse. A native Windows app requires a message loop and creating a window with a window procedure that detects the WM_PAINT message to update the window. Etcetera.

    But you can write code that does both. Just write both a main() and a WinMain() function, the CRT automatically calls the correct one.

    0 讨论(0)
  • 2021-01-08 01:28

    _CONSOLE should do the trick for you.
    Also you can select the subsystem using #pragma comment( linker, "/subsystem:windows" ) or #pragma comment( linker, "/subsystem:console" ) if you really want to go this route.

    0 讨论(0)
提交回复
热议问题