Is `__GNUC__` defined in dmd when using importC?
felixfxu
felixfxu at gmail.com
Fri Oct 10 10:06:39 UTC 2025
On Friday, 10 October 2025 at 09:02:33 UTC, Dejan Lekic wrote:
> Reading the https://dlang.org/spec/importc.html will help you
> solve the mystery. This section in particular:
> https://dlang.org/spec/importc.html#preprocessor
yes, thanks, now it is clear.
Actually my default c pre-processor is my locally compiled cpp
(version 16):
>which cpp
/usr/local/bin/cpp
and it's used to pre-process the .h files, so then __GNUC__ is 16.
But that introduce another question: dmd is not a complete gcc
replacement I guess, but in the headers, all `#ifdef __GNUC__` is
`true`, it will have problems for code like this:
```h
SDL_FORCE_INLINE int SDL_MostSignificantBitIndex32(Uint32 x)
{
#if defined(__GNUC__) && (__GNUC__ >= 4 || (__GNUC__ == 3 &&
__GNUC_MINOR__ >= 4))
/* Count Leading Zeroes builtin in GCC.
*
http://gcc.gnu.org/onlinedocs/gcc-4.3.4/gcc/Other-Builtins.html
*/
if (x == 0) {
return -1;
}
return 31 - __builtin_clz(x);
#elif
...
```
`__builtin_clz` will then be undefined in dmd compiling.
More information about the Digitalmars-d-learn
mailing list