Во-первых, я признаю, что это может быть невозможно, поскольку макросы раскрываются только один раз. Тем не менее, я надеюсь, что есть какой-то стандартный способ получения аналогичного поведения или предложения для других методов.
Я ищу способ сделать проверку времени компиляции в нашей сборке, которая вызвала бы ошибку в случае несовместимости. Следующее, конечно, не сработает, но я думаю, что это самый простой способ донести идею:
version.h:
#define CODE_VERSION 2
#define VERSION(x) #if (CODE_VERSION > (x) ) \
#error "Incompatible version detected!" \
#endif
main.c:
#include "version.h"
VERSION(1)
// ...and so on
Если выходной сигнал препроцессора был возвращен в препроцессор, это должно привести к появлению ошибки во время компиляции.
Итак, как правильно достичь этого (или подобного) поведения? Для любопытных мысль заключается в том, чтобы избежать ручного анализа во время проверок достаточно большой кодовой базы для соответствия процессу аудита (поскольку автоматический аудит намного менее обременителен).