Например, я недавно встретил это в ядре linux:
/* Force a compilation error if condition is true */ #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))
Итак, в вашем коде, если у вас есть структура, которая должна быть, например, кратной 8 байтам, возможно, из-за некоторых аппаратных ограничений, вы можете сделать:
BUILD_BUG_ON((sizeof(struct mystruct) % 8) != 0);
и он не будет компилироваться, если размер struct mystruct не будет кратным 8, а если он кратен 8, код выполнения не будет создан вообще.
Другим трюком, который я знаю, является книга "Графические драгоценные камни", которая позволяет одному заголовочному файлу объявлять и инициализировать переменные в одном модуле, а в других модулях, использующих этот модуль, просто объявлять их как externs.
#ifdef DEFINE_MYHEADER_GLOBALS #define GLOBAL #define INIT(x, y) (x) = (y) #else #define GLOBAL extern #define INIT(x, y) #endif GLOBAL int INIT(x, 0); GLOBAL int somefunc(int a, int b);
При этом код, определяющий x и somefunc, делает:
#define DEFINE_MYHEADER_GLOBALS #include "the_above_header_file.h"
тогда как код, который просто использует x и somefunc(), выполняет:
#include "the_above_header_file.h"
Итак, вы получаете один заголовочный файл, который объявляет оба экземпляра глобальных и прототипов функций там, где они нужны, и соответствующие объявления extern.
Итак, каковы ваши любимые трюки программирования на этих строках?