宏定义详解
来源:互联网 发布:标准差 知乎 编辑:程序博客网 时间:2024/05/29 19:35
宏定义不是C语言
1.宏定义是在预处理时候进行处理的,宏定义就是将引用宏名的地方用宏内容进行粘贴复制。
预处理时所进行的操作:1.将使用宏的地方进行替换2.将使用注释的地方用空格替换3.将头文件引入 其后所生成文件是纯C文件。3.确定代码的部分内容是否应该根据一些条件编译指令进行编译
2.宏函数和普通函数的优缺点:
1>宏函数替换之后,代码量可能会有所增加,其运行速度有所提高,而使用普通函数需要进行现场保护,现场恢复的操作,其代码在内存中只出现一次。
2>使用宏函数可能因为直接替换而导致运算的优先级发生改变,产生难以发觉的错误。
3>使用宏函数没有类型检查,适应于各种类型,即是缺点亦是优点,不安全。函数参数如果类型不同,就需要使用不同的函数,有严格的类型检查机制。
4>使用宏函数可能会导致副作用,参数每次调用宏定义时,它们都将重新求值。由于多次求值,具有副作用的参数会带来隐蔽的错误,而函数在调用之前只求值一次,多次使用参数不会导致多次求值过程。
例如定义 #define MAX(X , Y) (X)>(Y)?(X):(Y) 而在过程中引用x = MAX(i++ ,j++); 则此表达式的结果会自增两次。
3.断言:Evaluates an expression and when the result is FALSE, prints a diagnostic message and aborts the program.
void assert( int expression ); //如果表达式为假则发生中断,提示中断所在行
4.宏的作用域限于本文件从定义开始至结尾处。
5.预处理器符号,__FILE__, __LINE__, __DATE__, __TIME__
6. #,## 串化,连接
# 把一个宏参数转化为一个字符串。#expression被翻译为 “expression”
## 把位于它两边的符号连接成一个符号
例如 #define VALUEATION( sum_number , value) sum##sum_number = value
函数中引用 VALUEATION(6, 19); 则表达的意思为sum6 = 19;
7.宏名全部要大写,区别于变量。
8.条件编译:宏定义可以处理某个头文件被多个文件引用而造成的定义重复。通过宏定义一个变量,而在该工程中寻找是否定义了该变量,如果没有定义就定义该变量并且引用该文件。如果定义了该变量,则不会重复的引用,跳过这个文件。
#ifndef _VAR_
#define _VAR_
...
...
#endif
又如:
#if ...
#elif ...
#eles ...
#endif
条件编译指令可以嵌套使用
- C 宏定义详解
- 宏定义详解
- MFC宏定义详解
- 宏定义详解
- C 宏定义详解
- C++宏定义详解
- C++宏定义详解
- C++宏定义详解
- C++ 宏定义 详解
- C++宏定义详解
- C++宏定义详解
- C++宏定义详解
- C++宏定义详解
- C++宏定义详解
- C++宏定义详解
- C++宏定义详解
- C++宏定义详解
- C++宏定义详解
- java至今所学的关键词
- ssh登录缓慢
- sql Server Profiler (sql2005为列)
- web测试方法总结
- 同时选择日期和时间的对话框DateTimePickDialog
- 宏定义详解
- UML类图几种关系的总结
- 深入分析Android native exception框架---native编译
- 练手项目的小问题
- Linux用户管理
- 《OpenCV3编程入门》学习笔记五:core组件进阶
- Android四大基本组件介绍与生命周期
- WPF学习笔记:(一)数据绑定与DataContext
- Leetcode之Longest Valid Parentheses