首页 > 试题广场 >

下列对于宏的描述,不正确的是:()

[单选题]
下列对于宏的描述,不正确的是:()
  • 宏会带来性能的缺失
  • 宏不进行类型检查
  • 宏可以做到函数无法做到的功能
  • 编译时宏的处理早于函数
C选项,宏与类型无关,但是c++中函数必须指定返回类型,故宏可以做函数不能做的事
发表于 2016-12-29 22:18:10 回复(3)
A选项,不能绝对的说宏会带来性能损失他是不确定的,要根据你使用的情况,比如,调用函数式宏不需要入栈出栈,所以一般情况下,性能会提高点,但是如果使用不当,就会降低性能,比如:
函数式宏定义:#define MAX(a,b) ((a)>(b)?(a):(b))

int a[]={9,3,5,2,1,0,8,7,6,4};
int max(n)
{
return n==0?a[0]:MAX(a[n],max(n-1));

}
int main()
{
max(9);
return 0;
}
若是普通函数,则通过递归,可取的最大值,时间复杂度为On)。但若是函数式宏定义,则宏展开为( a[n]>max(n-1)?a[n]:max(n-1) ),其中max(n-1)被调用了两遍,这样依此递归下去,时间复杂度会很高。
所以我感觉A项说的绝对了。其实也可以使用排除法。
编辑于 2016-05-05 18:26:20 回复(2)
宏只是预定义的函数,在编译阶段不进行类型安全性检查,在编译的时候将对应函数用宏命令替换。对程序性能无影响。

选择A

发表于 2016-05-04 21:33:01 回复(2)
宏本质是文本替换,在预编译阶段完成。和程序性能没有实质联系。
发表于 2016-05-04 20:03:39 回复(0)
函数是一个过程,宏可以定义符号常量,这是函数做不到的
发表于 2019-06-02 21:32:43 回复(0)
首先宏不仅仅可以写成函数,也可以定义符号常量;其次宏替换不是在编译阶段,而是在预编译阶段;最后,性能的影响是有的,但不能绝对的说是好的影响还是坏的影响,这要看宏定义的好坏了,定义好了可以提高性能,定义不好就会拉低性能
发表于 2018-11-29 17:01:37 回复(0)

A在编译的时候将对应函数用宏命令替换,对程序性能无影响
B宏只是预定义的函数,在编译阶段不进行类型安全性检查
C不太明白
D正确
发表于 2017-08-23 20:33:41 回复(0)
宏是在编译阶段进行代码替换的预处理指令,没有类型检查和语法检查,可以提高程序的执行效率,但容易出错和难以调试。(宏可以在编译阶段进行代码替换,可以实现静态展开、条件编译、代码复用和代码优化等功能,而函数则是在运行时执行的,无法做到这些功能。但是宏的使用也需要谨慎,容易出错并且不易调试。
函数是一段独立的代码块,具有良好的封装性和可读性,可以在运行时动态调用和改变,但会引入一定的开销。
发表于 2023-09-30 20:18:46 回复(0)
宏不是文本替换吗?宏能实现的函数不能实现?
发表于 2016-06-21 22:52:32 回复(5)
宏定义是在预处理阶段,要比编译还早啊?
发表于 2023-10-02 15:09:54 回复(0)
宏是简单的符号替换,不会检查参数类型,而函数会严格检查输入的参数类型\n因为宏是在编译期进行的符号替换,所以在运行时,不会带来额外的时间和空间开销,而函数会在运行时执行压栈出栈的操作,存在函数调用的开销\n宏是不可以调试的,而函数可以进行单步调试\n宏不支持递归,函数支持递归
发表于 2023-04-02 10:55:46 回复(0)
函数无法传递参数类型,但宏可以。
发表于 2018-01-30 18:52:11 回复(0)
宏可以做到函数无法做到的功能?比如# PI=3.14 这种简单的替换功能函数无法做到
发表于 2017-09-15 10:43:14 回复(0)
说宏能做的函数都能做,你考虑过变量的感受吗
发表于 2016-10-19 13:36:23 回复(0)
求解,宏怎么就可以解决函数无法解决的问题
发表于 2016-05-11 19:34:51 回复(7)