C语言宏和函数的区别

首先宏的使用:

        有标准宏和宏函数

        标准宏就是将一个大写字母或单词定义成不可改变的常量,使用时直接文本替换,如:

    #define N  1000

        宏函数是将一个函数简化为大写的字母或单词,多次使用时会很方便。要注意的是宏函数里边,表达式和参数都要带上圆括号,否则可能会出现由于优先级或求值顺序而导致的bug,比如:

 假设:x=2+3
#define M(x) x*x
则此时输出结果为2+3*2+3=11
#define M(x) (x)*(x)
输出结果为(2+3)*(2+3)=25
#define A(x) (x)+(x)
int result=10*A(x)
此时输出结果为10*(2+3)+(2+3)=55
#define A(x) ((x)+(x))
此时输出结果为10*((2+3)+(2+3))=100

        所以在定义宏函数时一定要给表达式和参数都加上圆括号。

#

        可以用来将宏参数变成对应的字符串,如:

#define TEST(FORMAT,VALUE) print("the val of "#VALUE" is "FORMAT"\n",VALUE)
int i=10;
TEST("%d",i+3);     //#VALUE被预处理成为 i+3
输出结果是:the val of i+3 if 13

##

        可以把##两边的符号合成为一个符号,但合成后的符号必须是合法的标识符。

#define ADD(n,value)  sum##n+=value;
ADD(6,9);
输出为:sum6+=9;

宏和函数

 宏的优势:     对于小型计算,宏在规模和速度方面比函数有优势。

                       宏的参数是和类型无关的,但这既是它的优势也是它的劣势。

                       宏的参数可以是类型,也可以是另外一个宏的参数。

        劣势:     宏是不能调试的。

                       参数与类型无关,所以不够严谨。

                       由于调用宏时是文本替换,所以多次调用的话可能会大幅增加程序长度。

函数的优势:   每次调用你都是调用同一个地方的代码。

                       参数的辅佐用不会导致多次求值引发的错误,且结果容易预测。

          劣势:   函数调用和返回时会有额外开销

                       相对与宏,函数的速度稍慢。


猜你喜欢

转载自blog.csdn.net/ironman240/article/details/80139426