关于函数式宏定义的典型用法及易错点
1.函数体直接使用宏定义不管有没有返回值都不能作赋值运行的左右值 . 如下图示:
错误提示:
2.通过使用小括号()把函数体括起来使用宏定义可以得到该函数体最后一条语句运算结果,这里还需要注意 ,不能漏了' ; ',
如下图示:
打印结果如下:
3.一般情况下使用多语句宏定义时 ,最好使用do{...}while(0)或者({})的形式
因为在if() 结构里做分支执行部分时,使用do{...}while(0)可以使调用时后面能正确的使用' ; ' ,一旦没写就会像普通语句那样报错 , 这样符合我们的习惯 , 如果只是使用{}的结构体形式 , 那么在调用时后面不能使用' ; ' , 如果按照我们的习惯写上 ' ; ' ,那么就有可能引起错误 . 比如 : if()后面还有else语句的话, 就会出错 , 因为 ' ; '被当作另外一条语句(空指令)的结束符插在else的上面 .
注意 : 使用do{...}while(0)结构之后就不能把这个把这个宏定义作为赋值操作的左右值了.
图示如下:
打印结果对应如下:
4.需要得到函数式宏定义的返回值的方法
从上面我们已经可以知道当我们使用({})形式的宏定义时 , 只要函数体最后一次运算出的结果是我们想要的那使用这个形式是可以正确取得返回值的 并且放在赋值操作的右端; 当我们使用do{...}while(0)形式的宏定义时 , 我们是无法通过赋值操作来得到返回值的 , 但是我们可以通过多加一个参数 , do{}while(0)里面把要放回的值赋给多加的这个参数 , 这样我们就可以得到想要的返回值了.
演示图示如下:
打印结果如下:
补充:软件开发 , C语言 ,