预处理和宏
来源:互联网 发布:范莎学院怎么样知乎 编辑:程序博客网 时间:2024/06/05 14:48
1.预处理
文件包含:
#include<>:到系统指定的路径寻找,一般是:/user/include;
#include “”:优先从当前目录开始,一般适用于自定义头文件。
2.宏定义
#define PI 3.1415
单纯的替换
注意:不要加等号,不要末尾加分号。
3.带参数的宏
#define MAX(x,y) (x)>(y)?(x):(y)
注意:
- 带参数的宏,参数不能是多次计算后的数值。比如:MAX(x++,j++); //错误
- 每个宏都应该被包含在一对小括号里面,保证运算顺序。
#define MUL(x,y) x*y //很容易出错,MUL(1+2,2+3),替换后1+2*2+3#define MUL(x,y) (x)*(y)//还是会错,30/MUL(1+2,2+3),替换后30/3*5,但是其实是想30/(3*5)#define MUL(x,y) ((x)*(y))//这样才对
4.运算符
//#:将宏中的参数转换为字面值常量。限定:只能出现在带参数的宏的替换列表中。 #define PRINT(n) printf(#n"=%d",n) //##:将两个标识符粘合在一起形成一个标识符 #define MK_ID(n)i_##n MK_ID(1) i_1 MK_ID(23) i_23
5.C语言中预定义的宏:
<1>__LINE__:当前正当编译的程序的行号 %d<2>__FILE__:当前正当编译的源程序的名字 %s<3>__DATE__:编译程序的日期 %s<4>__TIME__:编译程序的时间 %s<5>__STDC__:判断编译器是否符合C标准,返回0或者返回1。一般:__STDC__?"符合":"不符合"
6.条件编译:
#if #endif
防止该头文件被重复引用。
好例子:
//交换两个参数值的宏定义为:#define SWAP(a,b)\(a)=(a)+(b);\(b)=(a)-(b);\(a)=(a)-(b);//输入两个参数,输出较小的一个:#define MIN(A,B) ((A) < (B))? (A) : (B))//表明1年中有多少秒(忽略闰年问题):#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL//已知一个数组table,用一个宏定义,求出数据的元素个数#define NTBL#define NTBL (sizeof(table)/sizeof(table[0]))
0 0
- C预处理和宏
- 预处理和宏
- 宏和预处理器
- 宏和预处理
- 预处理器和宏
- 预处理和宏
- 预处理指令和宏
- 预处理指令和相关宏
- 宏和预处理器详述
- 宏和预处理器详述
- 预处理宏和内联函数
- c++ 预处理和预处理命令
- C预处理指令和C宏
- 预处理指令和简单的宏定义
- C++中的预处理指示和宏
- VC中的预处理和宏定义
- 关于预处理和宏定义的知识
- 内联函数和预处理宏区别
- 繁忙的都市
- Mac下好用的HTTP/HTTPS抓包工具Charles
- 【数据结构和算法】全面剖析树的各类遍历方法
- ld: 219 duplicate symbols for architecture arm64 clang: error: linker command failed with exit code
- QT connect出现重复调用现象(执行两次SLOT函数)
- 预处理和宏
- Mysql入门(一)之SQL基本操作
- 深入理解JavaScript MVC 框架
- 内存分类总结
- iOS获取设备唯一标识的各种方法?IDFA、IDFV、UDID分别是什么含义?
- Activiti 数据库表结构
- dbus-daemon的启动与使用
- android service和activity跨进程通讯
- 如何解决激活Project Web App feature失败的解决方案