c++ - c/c++编译时 "compatibility"检查

标签 c++ c macros

首先,我认识到这可能是不可能的,因为宏只展开一次。但是,我希望有一些标准的方法可以实现类似的行为,或者对其他方法的追求提出建议。

我正在寻找一种方法来对我们的构建进行编译时检查,在不兼容的情况下会引发错误。下面的方法当然行不通,但在我看来是最简单的方法来传达这个想法:

版本.h:

#define CODE_VERSION 2
#define VERSION(x)    #if (CODE_VERSION > (x) ) \
                          #error "Incompatible version detected!" \
                      #endif

主.c:

#include "version.h"
VERSION(1)
// ...and so on

如果预处理器的输出被反馈预处理器,这应该会导致编译期间出现错误。

那么,实现这种(或类似)行为的正确方法是什么?出于好奇,这背后的想法是避免在审查相当大的代码库期间进行手动分析以符合审计流程(因为自动审计的负担要小得多)。

最佳答案

提升静态断言?由于它被标记为 C 和 C++,boost 可能不是一个选项,但请引用:BOOST_STATIC_ASSERT without boost用于替代。

关于c++ - c/c++编译时 "compatibility"检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4714958/

相关文章:

在重新定义 printf 的宏中将字符连接到 __VA_ARGS__

clang 中的 C 可变参数宏 __VA_ARGS__ 与 ##__VA_ARGS__

c++ - 套接字最大发送数?

C++ 模板函数重载解析

c++ - QObject : Cannot create children for a parent that is in a different thread

c++ - C++ 简明检查元素是否属于临时集

c - 具有不同变量类型的共享内存段 C

核心文件大小限制对进程具有不确定性影响

c++ - 带循环的宏在 C/C++ 中的实际工作方式

c++ - C++ 中的动态代理类。可能吗?