仅在满足静态constexpr时才包含代码



才有可能仅在静态constexpr具有一定值时才包含代码?

以此为例

static constexpr auto VERSION_MIN = 123;

如果将数字设置为124,则包括要编译的代码,否则将其排除。

基本上,我有两个源软件包,除了几行代码外,它们被认为是额外的或较小的。

我只想在不需要重新编译以切换版本的情况下进行通用应用程序。

我将如何检查constexpr是否等于124,我是否只使用基本的控制结构?还是有另一种方法?

以下可与GCC 4.9:

一起使用
static constexpr auto VERSION_MIN = 123;
void myFunction()
{
    if (VERSION_MIN == 123) {
        printf("This is version 123n");
    }
    else {
        printf("This is another versionn");
    }
}

在Linux上(现在不要这样的胜利工具(您可以检查二进制中不包含字符串"这是另一个版本 n"。

因此,您可以替换

#ifdef VERSION_MIN 123
    printf("This is version 123n");
#else
    printf("This is another versionn");
#endif

我的IDE(QTCreator(比预处理器代码更好地处理"纯" C 代码。

Microsoft Visual Studio 2015(如果您使用的话(已通过构建配置解决了此问题。您可以创建一个新的构建配置,然后给它一个预处理程序指令,以在构建时自动插入代码中。这将使您可以为代码的每个"版本"创建不同的构建配置,然后您可以"批处理构建"来构建每个版本。不更改每个版本的实际源代码。

要执行此操作,请转到Configuration Manager(在Release/Debug下拉列表下(,然后将您的版本称为名称,并复制以前的建筑配置中的设置。创建构建配置后代码是在该版本中编译的,不是什么。

#ifdef _DEBUG
std::cout << "data data data" << std::endl;
#endif //_DEBUG