← Back to context

Comment by pjmlp

13 hours ago

The deal was dealing with #ifdef spaghetti to define all of those, especially when mixing libraries across platforms.

Ifdef soup is still horrible, so those times (which I didn't experience firsthand) must have been abysmal.

  • If you want to know how bad it can be, only need to take a look at GCC's implementation of `stddef.h` for `size_t` and `ptrdiff_t` etc.

    https://github.com/gcc-mirror/gcc/blob/master/gcc/ginclude/s...

    There's a simpler way to define these types in newer versions of C which have `typeof`, we can take advantage of the fact that `sizeof()` always returns a `size_t`, `ptr - ptr` always returns a `ptrdiff_t`, and a literal L'c' has type `wchar_t`, etc.

        typedef typeof(sizeof(0)) size_t;
        typedef typeof(nullptr) nullptr_t;
        typedef typeof((void*)0-(void*)0) ptrdiff_t;
        typedef typeof(L'\0') wchar_t;
        typedef typeof(u8'\0') char8_t;
        typedef typeof(u'\0') char16_t;
        typedef typeof(U'\0') char32_t;
    

    Don't need ifdef soup to test what the sizes of things are on different architectures - we just utilize the compiler's implementation of those types.