C语言 不同源文件同一宏名可以定义不同宏体吗

2025-04-04 23:13:41
推荐回答(1个)
回答1:

假设1.c和2.c都定义了一个宏PI(宏体可以相同或不同),则可分两种情况分析:
1、这两个文件各自独立,都不包含对方
则互不影响,也访问不到对方定义的PI。
2、一个包含另一个
这就像在同一个文件中定义一个宏两次,如果没取消前一次定义,则在编译时,一般是显示一个警告,有的编译器也可能显示为错误。

结论:
可以在同一源文件中多次将同一宏名定义成不同的宏体(源文件相互包含的效果与此等同),但新的定义如果没先用#undef 宏名(如#undef PI)取消前一次定义,则在编译时,可能会显示警告或错误,显示警告则会用新定义取代旧定义,此处以前使用的仍是旧宏体,此处以后使用新宏体。

如:
#define p 1
void p1()
{
//输出1
printf("%d",p);
}
#define p 2
void p2()
{
//输出2
printf("%d",p);
}
//显式取消定义
#undef p
#define p 3
void p3()
{
//输出3
printf("%d",p);
}