学习第19天 undef可以终止宏定义的作用区域、
C语言
-
不带参数的宏定义、
-
用来替换的——字符串替换标识符、
-
标识符也叫宏名、
-
# define a 78 int main() { printf("%d ", a); } # define a 78 int main() { int b; b = 3 * a; printf("%d ",b); }
-
将宏名替换字符串的过程叫做——宏展开、
-
宏定义不是C语句、——define后面不用加分号、如果加分号则分号也会被替换、
-
define的有效范围是自#define 之后直至本源文件结束、define不能跨文件使用、
-
define可以引用已经定义的宏、可以层层置换
-
字符串内的字符即使与宏相同、也不进行替换——双引号内容不会被替换、
-
-
带参数的宏定义、
-
、相当与增加了形参
-
# define a(c,b)(c)*(b)//括号可以不添加 # define a(c,b)c*b int main() { int e = a(1,3); printf("%d ", e);
-
在形参后面增加括号有助于减少错误
-
宏定义时宏名和带参数的括号之间不能加空格
-
宏定义与函数的区别
-
函数调用时先求实参表达式的值、然后带入形参、
-
带参数的宏、只是简单的替换、并没有求表达式的值、
-
函数调用是在程序运行时处理、需要分配内存
-
宏展开不分配内存、因为是在编译时进行的、所以没有值传递和返回值的概念、
-
宏的参数没有类型限制、
-
宏使用次数多时将会增加源程序的长(
文件的大小?)函数则不会此出现此情况 -
宏展开占用编译时间、而不占用程序的运行时间、函数调用则占用的是程序运行的时间、
-
函数调用步骤
- 分配内存
2. 传递参数
3. 执行函数体
4. 返回值
- 分配内存
-
、特殊
-
define MAX(a,b) (a)>(b)?(a);(b) int main() { int e = MAX(4,5); printf("%d ", e); }//比较大小
-
-
、
-
-
-
C语言的三种预处理功能
- 宏定义、
2. 文件包含、
3. 条件编译、
- 宏定义、