0102
来源:互联网 发布:李小璐淘宝店网址 编辑:程序博客网 时间:2024/06/07 16:34
预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作。说白了,就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译。这样做的好处是,经过处理后的代码,将会变的很精短。
关于预处理命令中的文件包含(#include),宏定义(#define),书上已经有了详细的说明,在这里就不详述了。这里主要是对条件编译(#ifdef,#else,#endif,#if等)进行说明。以下分3种情况:1:情况1:
#ifdef _XXXX
...程序段1...
#else
...程序段2...
#endif
这表明如果标识符_XXXX已被#define命令定义过则对程序段1进行编译;否则对程序段2进行编译。
例:
#define NUM
.............
.............
.............
#ifdef NUM
printf("之前NUM有过定义啦!:) \n");
#else
printf("之前NUM没有过定义!:( \n");
#endif
}
如果程序开头有#define NUM这行,即NUM有定义,碰到下面#ifdef NUM的时候,当然执行第一个printf。否则第二个printf将被执行。
我认为,用这种,可以很方便的开启/关闭整个程序的某项特定功能。
2:情况2:
#ifndef _XXXX
...程序段1...
#else
...程序段2...
#endif
这里使用了#ifndef,表示的是if not def。当然是和#ifdef相反的状况(如果没有定义了标识符_XXXX,那么执行程序段1,否则执行程序段2)。例子就不举了。
3:情况3:
#if 常量
...程序段1...
#else
...程序段2...
#endif
这里表示,如果常量为真(非0,随便什么数字,只要不是0),就执行程序段1,否则执行程序段2。
我认为,这种方法可以将测试代码加进来。当需要开启测试的时候,只要将常量变1就好了。而不要测试的时候,只要将常量变0。
我们主要使用以下几种方法,假设我们已在程序首部定义#ifdef DEBUG与#ifdef TEST:
1.利用#ifdef/#endif将某程序功能模块包括进去,以向某用户提供该功能。
在程序首部定义#ifdef HNLD:
#ifdef HNLD
#include"n166_hn.c"
#endif
如果不许向别的用户提供该功能,则在编译之前将首部的HNLD加一下划线即可。
2.在每一个子程序前加上标记,以便追踪程序的运行。
#ifdef DEBUG
printf(" Now is in hunan !");
#endif
3.避开硬件的限制。有时一些具体应用环境的硬件不一样,但限于条件,本地缺乏这种设备,于是绕过硬件,直接写出预期结果。具体做法是:
#ifndef TEST
i=dial();
//程序调试运行时绕过此语句
#else
i=0;
#endif
调试通过后,再屏蔽TEST的定义并重新编译,即可发给用户使用了。
0 0
- 0102
- 0102
- 0102
- 0102-APP-ALarm-Service
- microstation level2--0102
- 0102 Processing 3xx Responses
- [Erlang 0102] 愚人节消息 too_big_to_fail_process
- 0102 - Android 简介 - 应用基础知识
- 0102-输出第二个整数
- 【读书笔记0102】Beginning linux programming-3rd
- C# 将数据库中01,0101 ,0102。。形成Tree
- 0102 Java设计模式02-代理模式【进阶】
- 0102 混蛋罗心得[敌人方位(多图, 慎入)]
- Tracrite.Software.Optimum.Control.Pro.v4.00.08.0102 Agisoft.PhotoScan.Professional.v1.3.2.4164 x64 A
- 新人问题 路过的帮忙看一下
- 请教,如何双按键
- wchar* 转char*与Qt下码制转换
- 计算字符个数 ---华为笔试题目
- <jsp:invoke fragment=""/>的理解和使用
- 0102
- iOS开发:AFNetworking和ASIHTTPRequest的比较
- 求教短信协议?
- 斐波那契数列知识小结
- 6、单向链表
- Lua学习笔记(基础二)
- 三角形概率分布
- Codeforces Round #301 (Div. 2)-D. Bad Luck Island(概率dp)
- 数据库查询