【发布时间】:2013-08-29 03:17:45
【问题描述】:
在 c 中,我在现有代码库中有以下内容:
#define MYVAR (1)
正如你所看到的,这是通过用括号括起来 #define 来符合 C 中的良好实践(尽管我知道在这种情况下它没有区别,因为值不是 一种表达)。无论如何,我想在字符串化中使用它。当我这样做时:
#define STRINGIFY(x) #x
#define TO_STRING(x) STRINGIFY(x)
const char* mystring = TO_STRING(MYVAR) ;
结果字符串是“(1)”。我想删除括号而不做简单的事情:
#define MYVAR 1
在c中的字符串化过程中是否有消除括号的方法?
【问题讨论】:
-
由于这是在预处理阶段,并且您已明确定义
MYVAR替换为(1)我不相信您正在寻找的是可行的。如果是这样,我无法想象如果没有非常特定于 cpp-backend 的情况。 -
我害怕那个。谢谢
-
我不相信用括号括起来的文字一定是好的做法,它甚至可能让人相信它是宏语法的一部分。
-
@Veltas 部分避免宏扩展的意外副作用是非常的常见做法。首先,我不喜欢复杂的预处理器宏,但是为了确保扩展的值而不是引用扩展,它不仅很常见,而且建议。 (对 OP 没有任何帮助,但它仍然是正确的)。
-
@WhozCraig:我说的是文字。仅仅因为它是常见的做法并不意味着它是好的做法。我不确定我是否看到在宏定义中特别用括号包围文字的意义,它看起来很麻烦。
标签: c c-preprocessor stringify