本文目录一览:
C语言多个源程序宏定义的作用范围
宏定义分类:
(1)不带参数的宏定义
形式: #define 宏名 [宏体]
功能:可以实现用宏体代替宏名
使用实例: #define TRUE 1
作用:程序中多次使用TRUE,如果需要对TRUE的值进行修改,只需改动一处就可以了
(2)带参数的宏: #define 宏名 ( 参数表) [宏体]
宏定义作用:
(1)方便程序的修改
上面的#define TRUE 1就是一个实例
(2)提高程序的运行效率
宏定义的展开是在程序的预处理阶段完成的,无需运行时分配内存,能够部分实现函数的功能,却没有函数调用的压栈、弹栈开销,效率较高
(3)增强可读性
这点不言而喻,当我们看到类似PI这样的宏定义时,自然可以想到它对应的是圆周率常量
(4)字符串拼接
例如:
#define CAT(a,b,c) a##b##c
main()
{
printf("%d\n" CAT(1,2,3));
printf("%s\n", CAT('a', 'b', 'c');
}
程序的输出会是:
123
abc
(5)参数转化成字符串
示例:
#defind CAT(n) "abc"#n
main()
{
printf("%s\n", CAT(15));
}
输出的结果会是
abc15
(6)用于程序调试跟踪
常见的用于调试的宏有,_ L I N E _,_ F I L E _,_ D A T E _,_ T I M E _,_ S T D C _
(7)实现可变宏
举例来说:
#define PR(...) printf(_ _VA_ARGS_ _)
C语言宏的作用域
C的宏也有做用域之说?我倒是真不知道呀,搞了这么多年的C
我只知道,宏定义从定义开始到取消定义止,它都是有效的,它是在编译之前预处理替换的,不是在运行中的东西,对于最终的执行程序而言,它并不知道有宏这么个东西
你可以做个简单的试验:
#include stdio.h
void main()
{
do
{
#define TEST 123
printf("%d\n",TEST);
}while(0);
#ifndef TEST
printf("有生存周期");
#else
printf("没有生存周期%d",TEST);
#endif
}
/////////////运行结果:
123
没有生存周期123
C语言中,提前终止宏定义作用域的命令是?
在C语言中,宏定义的作用域是从定义的那一行开始直到文件末尾,
但我们可以用#undef来提前终止宏定义的作用域。
请采纳,谢谢。