mikejsavage.co.uk • About • Archive • RSS • Thanks for blocking ads! Blocking ads owns: AdGuard for Safari / uBlock Origin for everything else
More preprocessor craziness:
#define A 1
// do not define B
#if A == B
#endif
int main() { return 0; }
Shows no warnings with -Wall -Wextra
, you have to go -Weverything
to
get -Wundef
to get "warning: "B" is not defined, evaluates to 0".
This doesn't seem like a big deal but we got bit by it. A colleague renamed the OSX platform define to MACOS, then presuambly he went down all the compile errors and fixed them. Unfortunately we had something like:
#if WINDOWS
#include "windows_semaphore.h"
#elif OSX
#include "osx_semaphore.h"
#else
#include "posix_semaphore.h"
#endif
which doesn't throw any errors if you change the define to MACOS because
OSX defines the POSIX semaphore interface. It is broken though, because
all the sem_
functions return "not implemented" errors at runtime!
It's very frustrating that the most basic building blocks we have in programming are full of shitty shit like this. I have no suggestions on how to improve things or any interesting commentary to add beyond that.