CCR
1
RT, 在一开始学c的时候,咱们都知道
#include <stdio.h>
int main(int argc, char *argv[]){
printf("hello world");
return 0;
}
上面这个编译出来的main.exe
(只说windows平台)是会显示一个黑乎乎的窗口的,但是有时候不需要这个黑色窗口,仅凭快捷键与弹出的通知与用户交互,这时候怎么隐藏这个黑色控制台窗口呢?
不同编译器
MSVC
#include <windows.h>
#pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" )
GNU
编译时添加参数 -mwindows
即可
Clang
现在问题来了,clang怎么办呢……
奇技淫巧
使用vbs,bat等其他语言创建一个启动程序,使用windows api启动main.exe
……(不予考虑,又丑陋又恶心的实现方案)
最佳答案:用clang-cl,然后抄msvc的
(啥,你的clang没有clang-cl?
那
-Wl,--subsystem,windows
2 个赞
w568w
3
没有研究过如何添加,不过有一个简单提示:
问题本质是需要指定 PE 可执行文件头部的 Subsystem 字段为 IMAGE_SUBSYSTEM_WINDOWS_GUI
(The Windows graphical user interface (GUI) subsystem)。
参考:
L11
4
你写的不就是控制台应用程序?不显示控制台窗口怎么看结果呢?
而且使用-mwindows时入口点是WinMain,严格说来应该是编译不能通过,而且也不能使用stdin和stdout
1 个赞
添加subsystem:windows会让入口变成mainWindows,也就是从console app变成GUI app,相关的stdin、stdout、stderr通通不会显示。