海尔建设此网站的目的是什么,做门户网站赚钱吗,青岛市黄岛区城市建设局 网站,上海做网站找哪个公司好预处理
文件包含
当预处理器发现#include指令时#xff0c;会查看后面的文件名并把文件的内容包含到当前文件中
两种写法 尖括号#xff1a;引用的是编译器的库路径里面的头文件。 双引号#xff1a;引用的是程序目录中相对路径中的头文件#xff0c;如果找不到再去上面…预处理
文件包含
当预处理器发现#include指令时会查看后面的文件名并把文件的内容包含到当前文件中
两种写法 尖括号引用的是编译器的库路径里面的头文件。 双引号引用的是程序目录中相对路径中的头文件如果找不到再去上面的库里面找。 宏
参数批量替换到文本中这种实现通常称为宏
#define 宏名(记号) 内容
#define PI 3.1415926
参数传递
#define MUL(x) x * x
#define bb(i) printf(我是宏替换的%d, i);
int main() {printf(%d, MUL(9));bb(10);
}
系统宏
宏名称含义_ _ DATE _ _当前的日期格式为类似May 30 2023 的字符串_ _ TIME _ _当前的时间格式为类似 10:23:12 的字符串_ _ FILE _ _当前源代码文件的名称含路径的字符串_ _ LINE _ _当前所处的行号是多少就替换为多少整数
条件编译
根据条件选择性地对某些内容进行忽略相当于if-else语句
#ifdef PI //ifdef用于判断是否定义了符号PI如果没有的话则处理以下的指令#define M 666
#else //如果定义了符号PI那么就处理这个分支的语句#define M 777
#endif //最后需要以endif指令结束整个判断
#ifndef PI //ifndef 就是 if not define跟ifdef反着的#define M 666
#else#define M 777
#endif
#define M 666
#if M 666 //若M等于666那么定义K 999#define K 999
#elif M 777 //等同于else if语句#define K 888
#else //else语句#define K 000
#endif
程序编译
编译过程 GCC原名为GNU C语言编译器GNU C Compiler gcc执行编译的过程 预处理Pre-Processing首先会经过预处理器将程序中的预编译指令进行处理然后把源文件中的注释去掉处理include和define 编译Compiling处理好之后就可以正式开始编译首先会编译为汇编代码。 汇编Assembling接着就该将汇编代码编译为机器可以执行的二进制机器指令了会得到一个二进制目标文件。 链接Linking最后需要将这个二进制目标文件与系统库和其他库的OBJ文件、库文件链接起来最终生成了可以在特定平台运行的可执行文件。 其中 -E 后面的是源文件名称-o 是预处理后生成的文件名称
gcc -E test.c -o test.i #代码在经过预处理之后#include中的内容都替换过来
gcc -S test.i -o test.s #编译为汇编程序
gcc -c test.s -o test.o
gcc test.o -o test(test.exe) #链接
执行可执行文件 也可以一步到位
gcc test.c -o test
多文件处理
gcc main.c test.c -o main
Make和CMake构建
Make
当需要构建大量内容时让谁先编译谁后编译Make构建工具就可以解决这种组织的问题
支持使用变量、逻辑判断等高级用法
编写Makefile文件有点Dockerfile的意思 只需要把需要执行的命令按照想要的顺序全部写到里面就可以了
targets : prerequisitescommand targets构建的目标可以是一个普通的标签、文件名称等 prerequisites前置条件可以设定要求完成其他目标才能开始构建当前目标 command构建需要执行的命令 main.exe: test.o main.o #目标1构建最终的程序要求完成下面两个目标注意最终目标需要写在第一个gcc test.o main.o -o main
main.o: main.c #目标2构建目标为main.o前置要求必须有main.c文件gcc -E main.c -o main.igcc -S main.i -o main.sgcc -c main.s -o main.o
test.o: test.c #目标3同样的要求必须有test.c文件才能开始gcc -E test.c -o test.igcc -S test.i -o test.sgcc -c test.s -o test.o
在控制台输入make命令就开始编译 CMake
CMake是一个跨平台的安装编译工具可以用简单的语句来描述所有平台的安装(编译过程)。能够生成各种各样的makefile或者project文件
编写CMakeList.txt文件
cmake_minimum_required(VERSION 3.22)
project(untitled C)
set(CMAKE_C_STANDARD 99)
add_executable(untitled main.c test.c test.h) 第一行使用cmake_minimum_required来指定当前项目使用的CMake最低版本如果使用的CMake程序低于此版本是无法构建的。 第二行project指定项目名称名称随意后面的是项目使用的语言这里是C。 第三行set用于设定一些环境变量等这里设定的是C 99标准。 第四行add_executable用于指定一个编译出来的可执行文件这里名称为untitled后面的都是需要编译的源文件头文件可以不写 输入cmake命令进行生成 cmake -S . -B test -G MinGW Makefiles
其中-S后面的是源文件目录这里.表示当前目录-B后面是构建目录一会构建的文件都在这里面存放最后-G是选择生成器生成器有很多甚至可以直接生成一个VS项目这里需要生成Makefile所以填写MinGW Makefiles