←back to thread

271 points mithcs | 1 comments | | HN request time: 0s | source
Show context
dboon ◴[] No.45954041[source]
Nice, but if the intention is portability my experience has unfortunately been that you pretty much have to stick to C99. MSVC’s C compiler is rough, but pretty much necessary for actual cross platform. I have my own such header which has many, many things like the OP’s. As much as I would find it constantly useful, I don’t have a cleanup utility because of this.

But if you can stay out of MSVC world, awesome! You can do so much with a few preprocessor blocks in a header

replies(3): >>45954109 #>>45954162 #>>45954608 #
1718627440 ◴[] No.45954608[source]
You can use GCC on MS Windows just fine. Installing MSYS2 will also give you a package manager.
replies(1): >>45954941 #
dboon ◴[] No.45954941[source]
Yes, of course. Unfortunately, sometimes you need to link to Windows binaries and therefore need to compile against the Windows ABI.
replies(1): >>45955341 #
1718627440 ◴[] No.45955341[source]
From https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html

> -mabi=name Generate code for the specified calling convention. [...] The default is to use the Microsoft ABI when targeting Microsoft Windows and the SysV ABI on all other systems.

> -mms-bitfields Enable/disable bit-field layout compatible with the native Microsoft Windows compiler. [...] This option is enabled by default for Microsoft Windows targets.

Doesn't this work in practice, due to bugs?

replies(1): >>45956199 #
1. electroly ◴[] No.45956199[source]
(Not OP) The C++ ABI on Windows isn't compatible between g++ and MSVC, even though the C ABI is. Libraries using C linkage should work fine. MinGW-built programs link against the Microsoft C runtime (MSVCRT.DLL by default) which is itself MSVC-built, so linking MinGW programs to MSVC libraries has to work for anything to work.