gpt4 book ai didi

C(预处理器): How to concatenate/append substitution string

转载 作者:行者123 更新时间:2023-11-30 15:18:36 25 4
gpt4 key购买 nike

我在命令行上定义异常:

-DEXCEPTION_1=\"first\" -DEXCEPTION_2=\"second\" -DEXCEPTION_3=\"third\"

我根据字符串进行检查:

except = 0;
#ifdef EXCEPTION_1
if (! strcmp(EXCEPTION_1, mystring))
{ except = 1;
}
#endif
#ifdef EXCEPTION_2
if (! strcmp(EXCEPTION_2, mystring))
{ except = 1;
}
#endif
#ifdef EXCEPTION_3
if (! strcmp(EXCEPTION_3, mystring))
{ except = 1;
}
#endif
if (except == 1)
{ // do something
}
else
{ // do something else
}

不用说,虽然这可行,但它也相当丑陋、不灵活,并且会导致我的代码冗余。

有没有办法将字符串附加到预处理器宏变量?

我想要得到这样的东西(当然问题是#append不存在):

#ifdef EXCEPTION_1 #append EXCEPTIONS if (! strcmp(EXCEPTION_1, mystring)) {  except = 1; }
#ifdef EXCEPTION_2 #append EXCEPTIONS if (! strcmp(EXCEPTION_2, mystring)) { except = 1; }
#ifdef EXCEPTION_3 #append EXCEPTIONS if (! strcmp(EXCEPTION_3, mystring)) { except = 1; }

然后我可以在代码中使用EXCEPTIONS,它将适用于所有可能的异常排列。

换句话说,我想将字符串附加到宏变量 - 这可能吗?

最佳答案

你可以有定义链,但它看起来也好不了多少:

#ifdef EXCEPTION_1 
#define EXCEPTIONS1 if (! strcmp(EXCEPTION_1, mystring)) { except = 1; }
#else
#define EXCEPTIONS1
#endif

#ifdef EXCEPTION_2
#define EXCEPTIONS2 EXCEPTIONS1 if (! strcmp(EXCEPTION_2, mystring)) { except = 1; }
#else
#define EXCEPTIONS2 EXCEPTIONS1
#endif

// etc

同样,情况也好不了多少。

而且您真的不应该使用 open if 定义宏的。它允许奇怪的交互,例如 if(cond) EXCEPTIONS1 else cout<<"error"; -- 这不会达到您的预期,因为 EXCEPTIONS1是一个简单的 if并将吞噬else分支。

使用代码块编写宏的典型方法是将整个内容包装在 do{...}while(0) 中。 (注意没有结尾;)。

关于C(预处理器): How to concatenate/append substitution string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31293768/

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