printf中的宏变量替换

时间:2015-09-07 13:30:38

标签: c macros printf c-preprocessor

我用一个printf语句写了一个简单的程序,比如hello world。

#include <stdio.h>
#define MAX 100
int main()
{
    printf("Max is %d\n",MAX);
}

我研究过,宏只是用预处理器代替发生。通常printf需要一个带有相应格式说明符的变量名来打印变量的值。 在这里,根据我的理解,应该在printf调用中替换100并且应该引发错误。

但输出是:

Max is 100

如何以及为何?

2 个答案:

答案 0 :(得分:4)

  

“通常printf()需要一个带有相应格式说明符的变量名来打印变量值。”

你错了。 printf()提供的所有格式说明符都需要特定类型的 参数 ,而不是 变量 那种在这种情况下,100 integer literal%d的有效参数。

因此,printf("Max is %d\n",100);C中都是有效且合法的陈述。你得到的输出是预期的输出,不应该有错误或警告。

只需添加对实际单词的引用,引用C11,章节§7.21.6.1,fprintf()(强调我的)

  

d,i

     

int参数转换为[...]

答案 1 :(得分:1)

printf格式"%d"告诉printf从参数列表中提取int参数。如果int来自变量或文字并不重要。