Du kannst da im Prinzip jede Bedingung eintragen, die der Compiler zur Compilezeit auflösen kann. Einen Teil kannst du auch mit dem Präprozessor erschlagen (#ifdef usw.), aber bestimmte Dinge wie sizeof() oder offsetof() kann man dort nicht zuverlässig verwenden. Dafür gibt es dann solche BUILD_BUG-Makros.
Ich benutze eins z.B., um sicherzustellen, dass ein Array nicht mehr Speicher benutzt, als da ist: "BUILD_BUG(SIZE_X * SIZE_Y * sizeof(node_t) > 24*1024)", wobei SIZE_X, SIZE_Y und node_t einstellbar sind. Die kann man im Prinzip beliebig einstellen, aber wenn das Ergebnis größer als 24 KB wird, funktioniert es halt nicht. Das fange ich damit ab.