Par exemple, je suis récemment tombé sur ça dans le noyau linux:
/* La Force d'une erreur de compilation si la condition est vraie */ #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))
Donc, dans votre code, si vous avez une certaine structure, qui doit être, dire un multiple de 8 octets la taille, peut-être à cause de certaines contraintes matérielles, vous pouvez le faire:
BUILD_BUG_ON((sizeof(struct mystruct) % 8) != 0);
et il ne compile pas, sauf si la taille de la structure mystruct est un multiple de 8, et si c'est un multiple de 8, pas de runtime code est généré à tous.
Un autre truc que je sais c'est tiré du livre "les Graphiques pierres précieuses" qui permet à un seul fichier d'en-tête à la fois déclarer et initialiser des variables dans un seul module, tandis que dans d'autres modules à l'aide de ce module, simplement de les déclarer comme externes.
#ifdef DEFINE_MYHEADER_GLOBALS #define MONDIALE #define INIT(x, y) (x) = (y) #else #define MONDIALE extern #define INIT(x, y) #endif MONDIAL int INIT(x, 0); MONDIAL int somefunc(int a, int b);
Avec cela, le code qui définit x et somefunc n':
#define DEFINE_MYHEADER_GLOBALS #include "the_above_header_file.h"
alors que le code c'est simplement à l'aide de x et somefunc ():
#include "the_above_header_file.h"
Ainsi, vous obtenez un fichier d'en-tête qui déclare les deux instances de variables globales et les prototypes de fonction où elles sont nécessaires, et le correspondant externe déclarations.
Alors, quels sont vos favoris de programmation C tours le long de ces lignes?