我需要重新定义父项目中的预处理器定义吗
Do I need to redefine preprocessor defines in parent projects?
也许因为找不到合适的关键词,我无法在谷歌上澄清我的疑问。
假设我有两个C++项目projA和projB。在projA中的exmpl.h文件中,存在以下条件:
class myClass
{
...
#ifdef MYVAR
virtual ~myClass() {}
#endif
}
我将MYVAR
定义为一个项目设置,并编译projA以生成projA.a静态库。
现在,从projB,我需要使用projA的exmpl.h
。简单地说,我包括它并使用projA.一个静态库编译projB。
然而,想象一下,在projB中,我没有定义MYVAR
。
在这种情况下会发生什么?projB是否跳过了
#ifdef
中的代码,但使用了与#ifdef
中的代码一起编译的静态库?那么,这是一个错误,会导致意外行为吗?
我们必须定义所有在子项目中使用的预处理器定义吗?
谢谢。
两个项目中使用的myClass
的定义必须相同,否则违反了"一个定义规则",导致未定义的行为,不需要诊断(也就是说,编译器不需要告诉您违规情况)。
因此,是的,您必须在projB中定义MYVAR
,以及影响两个项目中使用的定义的其他定义。
当然,这只适用于两个项目中使用的ODR实体。
相关文章:
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 在 Mac 上使用 CMAKE 将 FFTW 和 FFTWPP 链接到项目中时未定义的符号
- MacOS 上的 Xcode 11 项目不在一个函数中使用 sin 和 cos:未定义的符号"___sincosf_stret"
- 令人困惑的定义指令在C ++项目中
- 自定义 QML QQuick彩绘项目成员锚点未在 qml 中设置为父级
- 自定义构建文件更改不会触发VS 2017中的项目重建
- 为Qt项目树中的所有项目定义全局宏
- 我不断收到对项目"xxx"的错误未定义引用
- 是否可以在相同的命名空间中,但在不同的嵌套项目中定义具有相同名称的类
- C++ priority_queue与自定义比较器并删除任何项目
- 如何解决:自定义QGraphics项目接收鼠标新闻事件坐标延迟/滞后?
- 我可以在将项目编译为静态库(未定义的引用)时在代码中使用 QImage 吗?
- 优点和缺点 在类内为大型项目定义的内联朋友助手免费函数
- 当我调整自定义项目时,如何在自定义Qgraphictem中的场景中隐藏子项目
- Qt:模型/视图-定义项目持有日期的格式
- 如何在我自己的自定义项目中使用 INET 或 Mixim 的模块
- 将目录添加到Xcode自定义项目模板会产生奇怪的递归
- QListWidget性能与许多自定义项目
- Qt旋转/移动自定义项目相对于鼠标
- 在Visual Studio中链接PostgreSQL自定义C++项目时出错