条件编译使用分析
来源:互联网 发布:mysql语句优化 编辑:程序博客网 时间:2024/05/17 01:21
1 基本概念
- 条件编译的行为类似于C语言中的if…else…
- 条件编译是预编译指示命令,用于控制是否编译某段代码。
实例分析:条件编译初探
// #include <stdio.h>#define C 1int main(){ const char* s; #if( C == 1 ) s = "This is first printf...\n"; #else s = "This is second printf...\n"; #endif // printf("%s", s); return 0;}
2 条件编译的本质
- 预编译器根据条件编译指令有选择的删除代码。
- 编译器不知道代码分支的存在。
- if…else…语句在运行期进行分支判断。
- 条件编译指令在预编译期进行分支判断。
- 可以通过命令行定义宏。
- 如:
gcc –Dmacro=value file.c 或 gcc –Dmacro file.c
- 如:
当通过命令行定义宏时,如果未进行赋值则宏的默认值为1,如果在文件内进行宏未进行赋值则为空。
编程实验:通过命令行定义宏
//#include <stdio.h>int main(){ const char* s; #ifdef C s = "This is first printf...\n"; #else s = "This is second printf...\n"; #endif //printf("%s", s); return 0;}
3 #include的本质
- #include的本质是将已经存在的文件嵌入到当前文件中。
- #include的间接包含同样会产生嵌入文件内容的操作。
- 问题:间接包含同一个头文件是否会产生编译错误?
- 有可能会。
条件编译可以解决头文件重复包含的编译错误。
实例分析:条件编译的使用
// global.h#ifndef _GLOBAL_H_#define _GLOBAL_H_int global = 10;#endif
// test.h#ifndef _TEST_H_#define _TEST_H_#include "global.h"const char* NAME = "test.h";char* hello_world(){ return "Hello world!\n";}#endif
// #include <stdio.h>#include "test.h"#include "global.h"int main(){ const char* s = hello_world(); int g = global; // printf("%s\n", NAME); // printf("%d\n", g); return 0;}
4 条件编译的意义
- 条件编译使得我们可以按不同的条件编译不同的代码段,因而可以产生不同的目标代码。
- #if…#else…#endif被预编译器处理,而if…else…语句被编译器处理,必然被编译进目标代码。
- 实际工程中条件编译主要用于以下两种情况:
- 不同产品线共用一份代码;
- 区分编译产品的调试版和发布版。
实例分析:产品线区分及调试代码应用
// product.h#define DEBUG 1#define HIGH 1
#include <stdio.h>#include "product.h"#if DEBUG #define LOG(s) printf("[%s:%d] %s\n", __FILE__, __LINE__, s)#else #define LOG(s) NULL#endif#if HIGHvoid f(){ printf("This is the high level product!\n");}#elsevoid f(){}#endifint main(){ LOG("Enter main() ..."); f(); printf("1. Query Information.\n"); printf("2. Record Information.\n"); printf("3. Delete Information.\n"); #if HIGH printf("4. High Level Query.\n"); printf("5. Mannul Service.\n"); printf("6. Exit.\n"); #else printf("4. Exit.\n"); #endif LOG("Exit main() ..."); return 0;}
5 小结
- 通过编译器命令行能够定义预处理器使用的宏。
- 条件编译可以避免重复包含同一个头文件。
- 条件编译是在工程开发中可以区分不同产品线的代码。
- 条件编译可以定义产品的发布版和调试版。
阅读全文
0 0
- 条件编译 使用分析
- 条件编译使用分析
- 条件编译使用分析
- 3.2、条件编译的使用分析
- 【C语言学习】17__条件编译使用分析
- c语言学习笔记(12)条件编译使用分析
- 练习使用条件编译
- 条件编译的使用
- 主题三 编译过程介绍----17.条件编译的使用分析
- 条件编译宏的使用
- 条件编译的使用...#if...
- 专题3-3.条件编译使用分析(国嵌C语言视频)
- 【C语言复习(九)】条件编译的使用与分析
- 【C语言】代码分析--条件编译及编译预处理阶段
- 使用Conditional特性代替#if条件编译
- 在Flash Builder中使用条件编译
- 使用go build 进行条件编译
- 【C++】使用条件编译的头文件
- ACM算法——快速排序
- mongoDB数据库 学习笔记(一)
- Andrew NG 机器学习 Logistic Regression 第三周编程作业
- requests分析Ajax来爬取今日头条街拍美图
- Orleans框架------基于Actor模型生成分布式Id
- 条件编译使用分析
- Java并发编程:同步容器
- Express视图模板jade改为ejs,html模板
- git
- 零基础入门Python学习笔记3
- F
- 关于爬取数据保存到json文件,中文是unicode解决方式
- IOS,将阿拉伯数字转换为中文数字
- MySQL之数据存储索引篇(二)