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++面试常考关键字
导语:结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。下面就由小编为大家介绍一下C/C++面试常考关键字,欢迎大家阅读!C/C++面试常考关键字总结:ic关键字的作用?1)、static申明的变量为静态全局变量,该变量存储在静态数据区,...
-
C语言中文件操作详解及实例代码
在文件操作中除了打开操作以及读写操作,还有几种比较常见的操作。以下是本站小编搜索整理的关于这些操作中涉及到的函数,,需要的朋友可以参考本文!想了解更多相关信息请持续关注我们应届毕业生考试网!一.移动位置指针的函数rewind函数和fseek函数,这两个函数的原...
-
2017全国计算机二级《C语言》考试题及答案
在备考复习阶段,需通过大量试题练习,加深对考点的理解和掌握。以下是本站小编搜索整理的一份全国计算机二级《C语言》考试题及答案,供参考练习,希望对大家有所帮助!想了解更多相关信息请持续关注我们应届毕业生考试网!一、选择题1).我们所写的每条C语句,经过编译最...
-
C语言scanf函数应用问题解答
C语言的输入是由系统提供的库函数完成的。scanf函数是C语言中最常用且功能最强的输入函数,但该函数如使用不慎,就会出现错误或得不到预想的结果。以下结果都是基于VC++6.0运行环境。一、格式说明符和输入项的三对应(类型、个数、顺序)scanf函数格式中的格式说明(“%...