C中的宏观和功能冲突

Mah*_*pta 4 c macros function

当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;
}
Run Code Online (Sandbox Code Playgroud)

该程序抛出编译时错误.但我不明白它是否是某种语言违规或宏扩展错误或其他原因.

mis*_*tor 11

在预处理阶段,代码转换为:

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;
}
Run Code Online (Sandbox Code Playgroud)

...正如任何人都知道的那样,是非法的C代码.

(gcc您可以使用-E选项查看文件的预处理版本.)