条件编译
编译 条件
2023-09-11 14:20:37 时间
何谓条件编译?
条件编译又叫预处理程序,包括宏,都是在程序编译前做的一些必要的处理,这些都不是程序的实际功能代码,而仅仅是告诉编译器需要进行的特定操作
一般一个.c对应一个.h
file.h主要包含:
1.”file.c”中所要使用的一些宏
2.”file.c”中自定义类型的声明
3.”file.c”中定义的全局变量进行extern声明,提供给其他.c使用(必须加extern)
4.”file.c”中定义的函数,提供给其他.c使用(无需加extern)
“file.h” 模板:
/*标识符: 在理论上来说可以是自由命名的,但每个头文件的这个标识符都应该是唯一的。
标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线*/
#ifndef _FILE_H
#define _FILE_H
//---
//---
//--- 一般写自己的自定义变量类型
//---
//---
#ifndef _MAIN_C
//---
//---
//--- 一般写外部变量的声明(必须加extern)
//---
//---
#endif
//---
//---
//--- 一般写外部函数的声明(可以不加extern)
//---
//---
#endif
.c模板
#define _FILE_H
#include "file.h"
...
...
...
**#ifndef的最主要目的是防止头文件以及变量的重复包含和编译
重复包含和编译的危害**
1.使预处理的速度变慢了,要处理很多本来不需要处理的头文件。
2.可能预处理器就陷入死循环了(其实编译器都会规定一个包含层数的上限)。例如h1.h包含h2.h,h2.h又包含h1.h的情况,如果不采用防止头文件的重复定义,那么预处理器就会进入死循环了。
3.头文件里有些代码不允许重复出现。而重复定义头文件会重复出现一些代码。(虽然变量和函数允许多次声明(只要不是多次定义就行),但头文件里有些代码是不允许多次出现的)。例如:使用typedef类型定义和结构体Tag定义等,在一个程序文件中只允许出现一次。
小知识:
宏定义是C语言提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译。宏定义和操作符的区别是:宏定义是替换,不做计算,也不做表达式求解。
相关文章
- 贪吃蛇程序VS2012编译成功
- 【Swoole应用教程】一、Swoole扩展的编译安装部署
- 用命令行编译java并生成可执行的jar包
- mjpg-streamer在Ubuntu下编译,运行
- 通过final变量实现条件编译
- 使用Dockerfile编译自己的docker镜像
- Hbase hbck2下载编译和基本使用
- 编译可在Android上运行的依赖库(五):pcre库
- Qt pro中使用DEFINES来实现条件编译
- NDK21编译ffmpeg5.0.1
- python编译&反编译,你不知道的心机与陷阱
- C语言条件编译
- 【Groovy】编译时元编程 ( 编译时方法拦截 | 在 MyASTTransformation#visit 方法中进行方法拦截 )
- CEF3在linux(Ubuntu)环境下编译和运行问题记录
- 编译安装apache-2.4.18
- 编译u-boot 报错 openssl/evp.h: No such file or directory
- 嵌入式linux开发,served库移植,served交叉编译
- Android 编译FFmpeg x264
- cocos2d-x 3.0rc1 编译cpp-testsproject
- 新的编译开关:生成源码依赖性报告
- busybox编译错误
- Ubuntu下交叉编译内核出错:Can‘t use ‘defined(@array)‘ (Maybe you should just omit the defined()?)
- 关于Visual Studio 2019使用sprintf函数编译问题