|
|
1
11
在编译器看到代码之前,预处理器会展开宏。这意味着,例如,宏参数可能会被多次求值。 用你的宏,你会得到类似于:
如您所见,它将评估这两个函数,然后一个额外的时间多一个。这就是为什么宏是邪恶的。
可以通过定义
如果必须使用宏,则必须将计算存储在变量中:
使用一个函数,将对每个调用进行求值
先前的
调用函数。也就是说,它有点像前面的代码块。它计算函数的参数,获取结果,然后将这些结果传递到
|
|
|
2
2
那个max宏对参数求值两次-而且由于参数是递归函数调用,这可能是perf问题的根源。 |
|
|
3
0
这是因为max的定义。您对findheight()进行了3次调用,而不是2次。 |
|
|
4
0
更好的选择是使用以下签名声明函数:
这将防止宏的递归扩展。 |
|
|
Zevvysan · 为什么我的打印函数之一要删除节点? 8 年前 |
|
|
user9573040 · 递归二叉树高度 8 年前 |
|
|
Dipesh Desai · 在二叉树haskell中搜索值 8 年前 |
|
|
ibrahim · “main”已停止工作-C++[开发人员++] 8 年前 |