小编use*_*470的帖子

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

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

#if VERSION > 100
/* Compiling here */
#endif
Run Code Online (Sandbox Code Playgroud)

问题是"VERSION"在其他代码中我无法改变.它被定义为一个字符串:

#define VERSION "101"
Run Code Online (Sandbox Code Playgroud)

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

#if STRING_TO_NUMBER(VERSION) > 100
/* Compiling here */
#endif
Run Code Online (Sandbox Code Playgroud)

这可能吗?

PS.看来我的描述不太清楚.此要求的主要目的是控制版本分支.例如,在旧版本的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
Run Code Online (Sandbox Code Playgroud)

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

棘手的部分是,VERSION被定义为一个字符串,它提出了这个问题.

c c-preprocessor preprocessor-directive

8
推荐指数
1
解决办法
1215
查看次数

标签 统计

c ×1

c-preprocessor ×1

preprocessor-directive ×1