c - C 中的宏和函数冲突

标签 c function macros

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/

相关文章:

sql - 基于郁金香指标的 C 语言函数,使用 postgresql 计算 RSI

macros - 如何扩展Crystal语言语法?

c - 为什么 stdin 和 stdout 被认为是 C 中的文件?

c - 如何检查 fortran real 是否与 C float 兼容?

c++ - 退出控制台 "FreeConsole (void)"、 "return 0"或 "exit (EXIT_SUCCESS)"哪个更好?

rust - 如何实现一个允许为字段赋值的过程宏?

c++ - Visual Studio 从预定义字符串宏中抛出 "undeclared identifier"

c - C中的映射算法

c - 解释 1 位位域的行为

python - 检查函数是否是某个对象的方法