【发布时间】:2011-01-18 18:47:51
【问题描述】:
C 中出现宏和函数冲突时会抛出什么错误? 是宏处理器错误还是由于某些语言违规而发生此错误?
例如,在这段代码中:
#include <stdio.h>
#define MAX(i, j) (i>j)? i : j
int MAX(int i, int j){
return (i>j) ? i : j;
}
int main(){
int max = MAX(5, 7);
printf("%d",max);
return 0;
}
程序抛出编译时错误。但我不明白是语言违规还是宏扩展错误或其他原因。
【问题讨论】:
-
除了明显的问题(你是自虐狂吗?),它吐出了什么错误?而且,您是否尝试过用括号括住宏?
-
另外,请注意,MAX 的这个宏定义具有潜在的危险性和混淆性,因为它会对其参数进行两次评估(例如,考虑评估 MAX(i++,j++) 会发生什么)
-
Rule numero uno:用大写写你的宏名,用小写写函数名。问题解决了。