控制输出格式的宏与修改

#include <stdio.h>
#define P printf
#define D "%d\n"
#define F "%f\n"
int main()
{
int a=5,c=8,e=11;
float b=3.8,d=9.7,f=21.08;
P(D F,a,b);
P(D F,c,d);
P(D F,e,f);
}下面的输出中D与F之间为什么用空格,如果用了逗号,为什么那一个括号里的输出就一个4210688,而且不管是abcdef

P(D F,a,b);相当于printf("%d\n" "%f\n",a,b);,其中两个相邻的字符串会拼接成一个字符串,最终等价于printf("%d\n%f\n", a, b);
如果把空格换成逗号
P(D, F, a, b);则变成printf("%d\n", "%f\n", a, b);,printf()的第一个参数是"%d\n",这个格式输出的就是一个数,其值是字符串"%f\n"的地址

P(D F,a,b);相当于printf("%d\n" "%f\n",a,b);
空格隔开,表示输出两个数,分别为int类型a,float类型b
空格换成逗号,输出一个int类型随机数,因为%d的逗号后面没有跟变量,
若改成printf("%d\n",a ,"%f\n",b);则会输出a的值