打印定义名称c

时间:2017-04-26 12:50:35

标签: c printing

#define Page 5

void printSystemInfo() {

printf ("%i", Page);
}

多数民众赞成我的代码可以解释我如何在控制台中打印?

现在我的控制台看起来像这样" 5"但我想要""

感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

您可以使用一些预处理器技巧。我们有#运算符,它将符号转换为字符串。

#define _(a)    #a

当您致电_(foo)时,会将其翻译为"foo"。因此,在您的情况下,您可以执行以下操作:

#include <stdio.h>

#define _(a)    # a
#define PAGE    5

int main(int argc, char *argv[])
{
    printf("%s: %i\n", _(PAGE), PAGE);
    return 0;
}

这将做的是:

  1. 我们定义一个名为_的宏,它接受一个参数a。此宏使用预处理器中的运算符#(称为stringification)。这将是一个传递给宏的命名转换为字符串的情况。示例:_(foo)被翻译为"foo"

  2. main中,printf()来电被翻译为printf("%s: %i\n", "PAGE", 5);。以逐步的方式,当预处理器看到_(PAGE)符号时,它会将其翻译为"PAGE"

  3. 上述链接解释了这些内容的工作原理,我引用(我的标记):

  4.   

    有时您可能希望将宏参数转换为字符串常量。参数不会在字符串常量内替换,但您可以使用'#'预处理运算符。当宏参数与前导'#'一起使用时,预处理器将其替换为实际参数的文字文本,并转换为字符串常量。 与普通参数替换不同,参数不是首先进行宏扩展。这称为字符串化。

答案 1 :(得分:2)

你走了。这是非常微不足道的事情,但请问是否有不明确的事情。

#define Page 5

void printSystemInfo() 
{
  printf((char const[])??<0120,0141,0147,0145,0040,0045,0151,!"bad"??>,Page);
}