It can be removed with a compiler parameter, it depends on the platform and compiler. `gcc` supports `-Wl,--subsystem,windows` or [`-mwindows`](https://gcc.gnu.org/onlinedocs/gcc/x86-Windows-Options.html) compiler options. On Visual Studio, in Configuration Properties > Linker > System > SubSystem choose `Windows (/SUBSYSTEM:WINDOWS)` to avoid console. With other compilers there should be similar options.
It can be removed with a linker parameter, it depends on the platform and compiler. `gcc` supports `-Wl,--subsystem,windows` or [`-mwindows`](https://gcc.gnu.org/onlinedocs/gcc/x86-Windows-Options.html) compiler options. On Visual Studio, in Configuration Properties > Linker > System > SubSystem choose `Windows (/SUBSYSTEM:WINDOWS)` to avoid console. With other compilers there should be similar options.
<!-- TODO: explain changing the entry point to mainCRTStartup on visual studio -->