9 编译预处理
预处理命令
一、预处理命令的作用
-- 在编译之前,需要执行的命令
-- 编译预处理是在对源程序正式编译之前的处理,如inlcude先替换后计算
二、预处理命令
1、#include
-- 包含包括
(1) #include<> -- 默认优先从系统目录中查找头文件
(2) #include" " -- 默认优先从项目目录中查找头文件
2、#define
-- 宏定义 -- 完全替换
(1)不带参 -- 替换 -- int_32 int * -- int_32 a,b;
tip:执行结果为一个是指针的长度,一个是int类型的长度
(2)带参
-- #define div(a,b) a/b -- int a =10,b = 20; , div(a-5,b+3) = 10-5/20+3 = 13;
-- 找最大值 #define MAX(a,b) a>b?a:b;
3、#if - #endif
-- 条件编译
(1)#if --- #endif -- 条件编译代码内容 --在.c源码文件中
(2)#if - #elif - #else -#endif -- 条件编译代码内容 --在.c源码文件中
(3)#ifdef -- #endif -- 如果定义...
(4)#ifndef --#define --#endif --如果未定义... 定义.. 结束
-- .h文件中使用较多 -- 防止重复编译
三、C语言的关键字
-- 32个
1、数据类型之类
-- char,int,short,long,float,double,void,signed,unsigned,struct,union,enum -- 12个
2、流程控制之类
-- if,else,switch,case,break,default,while,do,for,continue,goto,return --12个
3、其他之类
-- const,static,extern,typedef,sizeof -- 5个
4、废弃之类
-- auto,register,volatile --3个
四、安装vscode工具
-- 参考安装步骤
模块化开发
一、模块化开发的作用
1、按照项目的结构进行项目开发 -- 分文件,分类型进行项目开发
2、多文件进行程序开发 -- 方便功能移植,内容排错
二、项目的目录结构
1、include -- 需要引入的.h文件所在位置,内容排错
2、lib -- 需要引入的第三方库文件
3、output -- 编译后的可执行文件
4、src -- 源码.c文件
三、模块化开发
1、.c文件 -- 功能实现的源码文件 -- 按照功能要求进行文件划分,分成不同的.c文件
-- 使用extern声明函数 ,表示使用外部资源的函数(extern 可以省略)
2、.h文件 -- 声明文件 -- 执行该功能所需要声明的内容
(1)声明文件中不能对变量进行赋值 !!不能在.h文件中对变量赋值!!
(2)声明文件中包含的内容:
a. 实现该功能所需的内容 -- 引入其他资源
b. 声明该功能的函数 -- 暴露自己的函数,提供给别人使用
例:
1、如何在虚拟机里打开vscode?
注:在存放项目目录的文件夹下打开终端,输入“code ./”表示在当前文件夹下打开vscode。
2、在项目目录中,src文件夹下存放的是源码文件,include文件夹下存放的是声明文件。
3、这里多写了个common.h用来声明经常被使用的函数和变量。
注:
函数的extern是可以省略的,但是变量的尽量别省,这里在common.h文件中的内容是用来提供给多个.h文件使用。
多个.c文件中要执行相同的函数和变量,就要在.h文件中声明,用extern关键字修饰函数和变量,这里extern的作用可以理解为他会去项目中的所有.c文件中找被extern修饰过的函数和变量的定义,然后在.c文件中实现。!!所以必须在其中一个.c文件中定义,在公用的.h文件中用extern来声明,然后在.c文件中来使用。要想使用全局变量和函数必须要用extern来声明。
4、最后执行.c文件
-- 将src下的所有.c文件编译成可执行文件放在output里,在编译时用到的.h文件从include文件夹中寻找,最后执行可执行文件。
tip: