有人能解释一下下面的C预处理器宏是如何工作的吗
#define SQR(a) (sqrarg=(a),sqrarg*sqrarg)
然后,源代码会像这样使用它:
y = SQR(a - b);
因此,这是否与以下相同?如果是,为什么?
#define SQR(a) ((a)*(a))
提前谢谢!
最佳答案
我认为在您的问题中,SQR
的第一种形式背后的想法是,如果SQR()
的参数是一个函数,那么它只被求值一次。也就是说,如果你有:
#define SQR(a) ((a)*(a))
你的代码中有:
myval = SQR(myfunction())
这将评估为:
myval = (myfunction() * myfunction())
如果你有:
#define SQR(a) (sqrarg=(a),sqrarg*sqrarg)
评估结果为:
myval = (sqrarg=(myfunction()), sqrarg*sqrarg)
只调用
myfunction()
一次。如果myfunction()
是计算密集型的,这就为您节省了大量时间。关于c - 未知类型的C预处理器宏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28268010/