gpt4 book ai didi

c - C/C++ 预处理器中是否有将字符串转换为数字的指令?

转载 作者:太空狗 更新时间:2023-10-29 17:03:38 25 4
gpt4 key购买 nike

我想在我的代码中添加一些条件指令来控制不同的构建,例如:

#if VERSION > 100
/* Compiling here */
#endif

问题是“VERSION”在其他人的代码中,我无法更改。它被定义为一个字符串:

#define VERSION "101"

我想知道是否有某种宏或指令可以将字符串转换为数字,这样我就可以简单地做

#if STRING_TO_NUMBER(VERSION) > 100
/* Compiling here */
#endif

请问这可能吗?

附言。看来我的描述不是很清楚。这个需求的主要目的是控制版本分支。例如,在旧版本中,版本 100 之前,此程序需要 old_function()。这个版本之后,所有的功能都迁移到了new_function。所以我需要写这样的代码:

#if VERSION >= 100
old_function();
#else
new_function();
#endif
#if VERSION >= 100
int old_function()
{
...
}
#else
int new_function()
{
...
}
#endif

你可以看到只有一个函数会被编译。因此条件必须在预处理阶段决定,而不是在运行时。

棘手的是,VERSION被定义为一个字符串,这就带来了这个问题。

最佳答案

如果您需要与预处理器交互以设置其他#defines 或有条件地#include 不同的 header 。直到你可以让 VERSION 被“固定”为一个整数......

我唯一能想到的就是创建一个定义 PROPER_VERSION 的小头文件,并通过将每个文件命名为版本号来包含它。所以在这里你会创建:

100:
#define PROPER_VERSION 100

101:
#define PROPER_VERSION 101

102:
#define PROPER_VERSION 102

然后您需要添加以下内容:

#include VERSION

然后根据需要使用PROPER_VERSION

#if PROPER_VERSION > 100
...

它不优雅,但我看不出你还能做什么。您可以自动生成 VERSION 文件。

关于c - C/C++ 预处理器中是否有将字符串转换为数字的指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20085630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com