我已经阅读了许多关于字符串化宏的内容,但我显然不太明白。我希望创建一个字符串,其中需要首先评估宏的参数。有人可以解释我出错的地方,或者可能更好地做到这一点吗?
#define SDDISK 2 // Note defined in a library file elsewhere ie not a constant I know)
#define DRIVE_STR(d) #d ":/"
#define xDRIVE_STR(x) DRIVE_STR(x)
#define FILEPATH(f) xDRIVE_STR(SDDISK + '0') #f
const char file[] = FILEPATH(test.log);
void main(void)
{
DebugPrint(file);
}
输出为:“2 +'0':/ test.log”,
但我想要“2:/test.log”
答案 0 :(得分:0)
C预处理器在编译器看到代码之前运行。
这意味着在进行字符串化之前不会对等式进行求值;相反,预处理器只会将整个方程式字符串化。
在您的情况下,只删除+'0'
将解决问题,因为SDDISK
的值在字符串化之前不需要转换为char。
但是,如果您确实需要在字符串化之前执行计算,则应该:
constexpr
。