C语言中如何定义函数式宏
导语:众所周知,宏扩展是纯粹的文本扩展,若定义不明确,就会导致结果错误,或者编译错误,尤其是定义函数式宏时,下面有三条规则可以使我们避免出错。具体有哪些呢?一起来学习下吧:
规则1:宏体必须使用括号包起来,以便保护表达式中低优先级的操作符。
例:
#define square(x)x*x
调用如下:
1/square(n)
会被扩展为
1/n*n
这等价于(1/n)*n,而我们需要的是
1/(n*n)
规则2:在宏定义内部,所有参数的.出现都必须用括号括起来,以便保护实参中任何低优先级的操作符不受宏扩展其他部分的影响。
同样以square()为例,调用
square(n+1);
会被扩展为
n+1*n+1
但我们需要的是
(n+1)*(n+1)
规则3:如果一个参数在扩展中出现了多次,并且实参是带有副作用的表达式,则宏可能不能正确运行。
再以square()宏为例,调用
square(i++)
会被扩展为
i++*i++
这很显然是未定义的
遵循规则1和规则2的正确square宏的定义应该是:
#define square(x) ( (x) * (x) )
【C语言中如何定义函数式宏】相关文章:
简单讲解C语言中宏的定义与使用11-19
C语言宏定义10-06
C 语言中宏的使用10-02
C语言自定义函数10-04
关于C语言宏定义的技巧11-23
c语言中time函数的用法10-08
C语言中strpbr()函数的用法10-04
C语言中isalnum()函数和isalpha()函数的对比11-21
C语言程序中函数的定义10-03
C语言中函数的区分有哪些11-21