100解剖宏定义函数

我们写好的C语言代码,编译器在编译之前,会进行一个预先处理的工作.
比如#include 包含文件,相当于把很多文件合并成1个文件.
#define 宏定义 进行替换.

#define 当然其他更加复杂的用法.
这节课,我们就学习一下.


使用宏的时候,宏的本质是替换,虽然看起来是函数.
但并不会开辟新的栈空间.

而函数会有新的栈空间开辟.

缺点就是:假如在10个地方用宏的话,就会在10个地方复制10次.
整个编译后的exe,会非常臃肿,冗余代码增加.

#include<stdio.h>
#include<stdlib.h>
#include<stdarg.h>
typedef char*mylist;
#define my_va_start(A,B)A=(char*)&B;A=A+4;
#define my_va_arg(A,B)*(B*)A,A=A+sizeof(B)
int xdd(int count, ...) {
int sum = NULL;
mylist p = NULL;//*mytisx=null
my_va_start(p, count);//mytisx=&count,p=p+4;

for (size_t i = 0; i < count; i++)
{
sum += my_va_arg(p, int);//sum=sum+*p,p=p+4

}
va_end(p);
return sum;
}
void main() {
int sum=xdd(5, 1, 2, 3, 4, 5);
printf("%d ", sum);
system("pause");
}

原文地址:https://www.cnblogs.com/xiaodaxiaonao/p/9191574.html