某些文章表示宏函数对文件结构造成了影响,不是很推荐宏函数,但是宏函数不需要开函数堆栈却是个不折不扣的优势。
关键是宏函数还是比较多见的:
①:最常见宏函数
#define MAX(a,b) ((a>b)?a:b)
#define MIN(a,b) ((a<b)?a:b)
②:只能用宏函数,主要优点在于宏定义的函数传入参数时不挑参数类型,不需要参数绝对匹配。
用于为不明确类型malloc空间
#define MALLOC(n,type) ((type*)malloc(n * sizeof(type)))
用于比较不同类型数据大小,比如float a 和 int b比较大小
#define MAX(a,b) ((a>b)?a:b)
多行宏函数注意点:
①:函数体未结束时换行需要加上“\”
#define FUN(a,b)\
{\
a++;\
b++;\
}
②:若需要返回值,则需要将函数体“()”扩起,且返回值就是最后一行函数的结果,如下即返回a+b的数值
#define FUN(a,b)\
({\
a++;\
b++;\
a+b;\
})
宏也可以是多行指令:
但需要花括号包住,且建议用do {} while(0)包住,内核中很多都是这样写的,不要问为什么,我希望入伍;
ep:
#define DUMP_WRITE(addr, nr, foffset) \
do { if (!dump_write(file, (addr), (nr))) return 0; *foffset += (nr); } while(0)
ep:
#define PULSE_HIGH { *REdat |= 0x4000; *RFdat |= 0x0002; } //实测这样ok
#define PULSE_HIGH do { *REdat |= 0x4000; *RFdat |= 0x0002; } while (0) //但还是推荐这样包住