不同项目中不同文件的预处理器指令(常量)

Posted

技术标签:

【中文标题】不同项目中不同文件的预处理器指令(常量)【英文标题】:preprocessor directives (constants) for different files in different projects 【发布时间】:2011-11-15 18:26:02 【问题描述】:

Visual Studio 2010 的不同项目中的不同文件是否可以有一些预处理器指令常量?这是我正在尝试做的一个示例:

在项目“A”的文件“1”中,我定义:TIMEDISPLAYING

 #define TIMEDISPLAYING

在项目“B”的文件“2”中,我检查了 TIMEDISPLAYING:

 #if TIMEDISPLAYING
        //do something
 #else
        //do something else
 #endif

我知道我可以在项目文件中添加我的自定义常量。解决方案文件中是否有可以添加类似内容的地方?或者导入我所有自定义常量的其他类型的文件?

我目前在一个类中定义了布尔常量,但我希望我的代码基于常量编译,而 DEBUG 对我来说还不够。如果定义了 DEBUG,我的下一个解决方案是添加我的布尔常量:

 #if DEBUG
           protected const bool ISTIMEDISPLAYING = 1 == 1;

           protected const bool ISDATARANDOM = 1 == 0;

           protected const bool IS_AUTO_LOADING_CHAMP_VENDOR = 1 == 1;

           protected const bool IS_TESTING_PO = 1 == 0;
 #endif

我在这里的最后一个解决方案有什么替代解决方案吗?非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

您可以在 Visual Studio 中项目属性的“生成”选项卡上设置条件编译符号,而不是在代码中声明它们。不同的构建配置可以分配不同的条件编译符号,您可以根据需要创建任意数量的构建配置。这可能更容易管理,您不必担心将它们添加到哪个源文件,因为它们存储在项目本身中。

如果您希望包含或排除基于条件编译符号的整个方法,您可能还会发现 Conditional attribute 很有用。

【讨论】:

我仍然不明白它如何适用于多个项目。我确实知道条件属性,但我不知道如何为所有项目制作它,而不必在每个项目上进行设置? 我知道已经快一年了,但事实证明这非常完美。谢谢你的建议。一开始我不太明白,但在过去的一个月里,我一直在努力花一些时间阅读这方面的文档,我只是为我正在创建的一些单元测试实现了这个。它非常完美,所以当我想使用某条数据运行我的单元测试时,我只需更改解决方案的配置类型,一切都运行完美,而无需做太多的工作。非常感谢。

以上是关于不同项目中不同文件的预处理器指令(常量)的主要内容,如果未能解决你的问题,请参考以下文章

Objective c中不同类型屏幕的预处理器指令?

有 C++ 标准库 ifdef 或 ifndef 预处理器指令吗?

C 基础 - 预处理器与C库

最好以编译器代替预处理器

你可以嵌套 C 预处理器指令吗?

预处理器指令 conio.h c++