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;
}
程序抛出编译时错误。但我不明白这是某种语言违规还是宏扩展错误还是其他原因。
最佳答案
在预处理阶段,代码被转换为:
int (int i>int j)? int i : int j{
return (i>j) ? i : j;
}
int main(){
int max = (5>7)? 5 : 7;
printf("%d",max);
return 0;
}
...正如任何人都知道的那样,这是一个非法的 C 代码。
(使用 gcc
,您可以使用 -E
选项来查看文件的预处理版本。)
关于c - C 中的宏和函数冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2296483/