C语言 不同源文件同一宏名可以定义不同宏体吗 20
在不同的源文件中,对同一宏名定义不同的宏体是合法的吗?可以再其他文件中调用此文件的宏吗?麻烦回复详细一些,谢谢各位了如我在A.c中定义了#definePI15;那么可以再...
在不同的源文件中,对同一宏名定义不同的宏体是合法的吗?
可以再其他文件中调用此文件的宏吗?
麻烦回复详细一些,谢谢各位了
如我在A.c中定义了#define PI 15 ;那么可以再其他文件中定义#define PI 20吗,或者调用PI=15 展开
可以再其他文件中调用此文件的宏吗?
麻烦回复详细一些,谢谢各位了
如我在A.c中定义了#define PI 15 ;那么可以再其他文件中定义#define PI 20吗,或者调用PI=15 展开
3个回答
展开全部
假设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);
}
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);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询