语句替换结果没看懂是怎么回事


#include <stdio.h>
#define FORMAT "%s! C is cool!\n"
int main(void)
{
    printf(FORMAT,FORMAT);

这个打印结果

img


为啥第二个%s没了,这是咋替换的。

把FORMAT直接用后面的串替换
相当于
printf("%s! C is cool!\n","%s! C is coll!\n");
打印效果就是用后面的串替换掉前面串中的%s就是了,即:
%s! C is coll!\n! C is cool!\n,\n表示换行,所以结果就是
%s! C is coll!
! C is cool!

printf只有前面的串中的%是格式化符号,后面的串只是内容
明白了吗?

替换后是这样的:

printf("%s! C is cool!\n","%s! C is cool!\n");
第一个%s被第二那一大串替代了

你这代码够绕的
盗梦空间吗
printf(FORMAT,FORMAT);
连续两个FORMAT ,前一个作为格式化字符串,后一个作为值,那么其实就是把后一个字符串整个塞进前面字符串的%s部分去