Во-первых, я признаю, что это может быть невозможно, поскольку макросы только расширяются один раз. Тем не менее, я надеюсь, что существует стандартный способ получения подобного поведения или предложения по другим методам.проверка совместимости с компиляцией c/C++
Я ищу способ сделать время компиляции проверить нашу сборку, которая приведет к возникновению ошибки в случае несовместимости. Ниже будет, конечно, не работает, но это самый простой способ, на мой взгляд, чтобы получить представление через:
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
Если выход препроцессора был возвращен в препроцессор, это должно вызвать ошибку при компиляции.
Итак, каков правильный способ достижения этого (или подобного) поведения? Любопытно, что мысль об этом заключается в том, чтобы избежать ручного анализа во время обзоров достаточно большой базы кода для соответствия процессу аудита (поскольку автоматический аудит настолько менее обременителен).
Я не понимаю, чего вы пытаетесь достичь. Обычно вы меняете версии.h и main.c вместе, чтобы они оставались совместимыми друг с другом. Возможно, вам нужна хорошая система контроля версий? – Juliano
Это а) по сотням файлов, а б) на самом деле НЕ относится к версии - я просто подумал, что это легко доступный эквивалент, без объяснения деталей того, что я на самом деле проверяю. Контроль версий не влияет на проблему. – Nate