3

在 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中的字符串化过程中消除括号?

4

1 回答 1

3

只需使用STRINGIFY x而不是STRINGIFY(x)

#include <stdio.h>

#define MYVAR 1

#define STRINGIFY(x) #x
#define TO_STRING(x) STRINGIFY x

int main(void)
{
    const char *mystring = TO_STRING(MYVAR);

    printf("%s\n", mystring);
    return 0;
}

TO_STRING(x)扩展到STRINGIFY (1)whenMYVAR被定义为(1)

如果MYVAR定义为1不带括号,则会出现编译时错误。

于 2013-08-26T17:24:42.490 回答