本文主要是介绍一个C/C++中宏使用容易出现的一个问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在C/C++中宏的使用只是单纯的替换,在每次替换的位置,表达式都会被计算。
而在函数中,参数传递的是表达式计算的值,而不是表达式本身。这两者的区别,就容易造成宏使用可能会出问题。下面是一个简单的例子,找出数组中最小的数。
#include <iostream>
using namespace std;#define min(a, b) ((a) < (b)? (a): (b))int main() {int a[4] = {8, 7, 6, 1000};int p = 0;int min_v = 10000;while (p < 4){min_v = min(a[p++], min_v);}cout << min_v << endl;return 0;
}
结果为1000
因为在宏min中, 其中的a, b都被计算了两次,调用方使用的p++就会被计算两次,这就不符合初衷了。
这篇关于一个C/C++中宏使用容易出现的一个问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!