C语言简单编译预处理-笔记

预处理指令

所谓预处理,是指,在编译之前对程序源码进行初步的转换,产生新的源代码提供给编译器.预处理时主要完成:包含其他源文件,定义宏,根据条件决定编译时是否包含某些代码(>防止重复包含某些文件)

1.#空指令,无效果
2.#include 包含一个源代码文件
3.#define 定义宏
4.#undef 取消已经定义的宏
5.#if 如果给定的条件为真,则编译下面代码
6.#ifdef 如果宏已经定义,则编译下面代码
7.#ifndef 如果宏没有定义,则编译下面代码
8.#elif 如果前文的#if给定条件不为真,当前条件为真,则编译下面代码
9.#endif 结束一个#if ... #elif条件编译块
10.#error 停止编译并显示错误信

以上内容参考https://www.cnblogs.com/zi-xing/p/4550246.html

extern关键字

基本解释为:

extern放在变量或者函数之前,表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.

两个作用

1.当它与"C"一起连用时,如:extern "C" void find(int k); 告诉编译器在编译fun这个函数时,按照C语言的规则来翻译,因为C++支持函数重载,函数名翻译规则与C语言不同.
2.单独使用时, 如: extern void find(int k); 它的作用就是__声明__全局变量或函数作用范围的关键字其声明的函数和变量可以在本模块或其他模块中使用.

引用https://www.cnblogs.com/WindSun/p/11434436.html

#ifdef __cplusplus

#ifdef __cplusplus
extern "C" {
#endif
//代码

#ifdef __cplusplus
}
#endif

首先, __cplusplus是C++中自定义的宏,定义了这个宏,就代表是这是一段C++代码
结合上面提到的extern "C"来说,这段代码的含义是:如果这是一段C++的代码,那么加入extern "C"{}之前的代码按照C语言的规则来编译.

在调试代码中也可以加入

#ifdef DEBUG

//调试代码。调试用到的find函数

#else

// 发行版find函数

#endif

只用在编译时gcc -DDEBUG -o target target.c 程序即可调用调试代码,去掉-DDEBUG即可生成发行版

posted @ 2020-02-21 15:30  Sophomores  阅读(345)  评论(0编辑  收藏  举报