打个比方#include<stdio.h>
#define md char *
int main()
{
md i,j;
printf("i:%d,j:%d\n",sizeof(i),sizeof(j));
return 0;
}
这样输出i,j变量所占的空间会发现i:4,j:4 应为i是指针j是字符变量
因为这样写就相当于#include<stdio.h>
int main()
{
char * i,j;
printf("i:%d,j:%d\n",sizeof(i),sizeof(j));
return 0;
}
应为就是把md替换成char *
这个是预处理的知识点 而你这个代码 目测还涉及到自增自减
这个要解释就得反汇编了
应为目测你宏替换之后会有类似于这种代码这个不看反汇编代码很难知道他到底是什么情况打个比方#include<stdio.h>
int main()
{
int i = 5;
printf("%d\n",i++ + i++ + i++);
return 0;
}
你猜猜看输出结果是多少??
结果是15 也就是i++ + i++ + i++ = i + i + i了??壳i++分明自增了啊 这问题不反汇编还真解释不了
都说了不要把自增自减这么写 就写成单独的一句代拿 那就没这么多破事了而且没有谁会在实际编程中这么写的很不利于维护的 |