博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
预处理和宏
阅读量:6447 次
发布时间:2019-06-23

本文共 1388 字,大约阅读时间需要 4 分钟。

hot3.png

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 、#elif 、#else、#endif

防止该头文件被重复引用。

#if defined(DB_SQLSERVER) // 如果定义了DB_SQLSERVER    connectSQLServer();            // 连接SQLServer数据库#elif defined(DB_ACCESS) // 如果定义了DB_ACCESS    connectACCESS();            // 连接ACCESS数据库#else // 如果没有定义数据库类型    printerror();                // 输出错误信息#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]))

转载于:https://my.oschina.net/HappyTeemo/blog/1558485

你可能感兴趣的文章
Intel 82599网卡异常挂死原因
查看>>
open-falcon
查看>>
三菱plc输出指示灯不亮怎么办(转载)
查看>>
doc2vec使用说明(一)gensim工具包TaggedLineDocument
查看>>
App测试中ios和Android的区别
查看>>
java.lang.NullPointerException&com.cb.action.LoginAction.execute(LoginAction.java:48)
查看>>
理解Docker :Docker 网络
查看>>
通过Application存取公共数据比如登录信息等..
查看>>
intellij maven配置与使用
查看>>
SpringMVC文件下载与JSON格式
查看>>
Q:图像太大,在opencv上显示不完全
查看>>
修正锚点跳转位置 避免头部fixed固定部分遮挡
查看>>
Dubbo序列化多个CopyOnWriteArrayList对象变成同一对象的一个大坑!!
查看>>
linux下ping不通的解决方法
查看>>
利用ItextPdf、core-renderer-R8 来生成PDF
查看>>
irc操作小记
查看>>
JAVA 与 PHP 的不同和相同
查看>>
建立Ftp站点
查看>>
NavigationController的使用
查看>>
多线程编程之Windows环境下创建新线程
查看>>