【让你从0到1学会c语言】程序环境和预处理指令(一)

简介: 【让你从0到1学会c语言】程序环境和预处理指令(一)

作者:喜欢猫咪的的程序员

专栏:《C语言》

喜欢的话:世间因为少年的挺身而出,而更加瑰丽。                                  ——《人民日报》

目录

程序的翻译环境和执行环境:

4个过程的介绍:

编译过程中各个阶段实现的事情:

预处理详解:

预定义符号:

#define :

#define 定义标识符

#define 定义宏

宏的申明方式:

宏存在的一些问题:

#define 替换规则

#和##

宏和函数对比

命名规定:

#undef

条件编译:

常见的条件编译指令:

文件包含

本地文件包含

库文件包含


程序的翻译环境和执行环境:

在ANSI C的任何一种实现中,存在两个不同的环境。


  • 第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。
  • 第2种是执行环境,它用于实际执行代码

编译一个C语言程序是一个多阶段的过程。从总体上看,这个过程可以分成四个独立的阶段。预处理、编译、汇编和连接


我们先来看看这4个过程的流程图:

4个过程的介绍:

1.一个文件经过编译器生成对应的目标文件

2.多个目标文件与链接库一起生成链接器,最终生成可执行程序。(编译过程


编译过程中各个阶段实现的事情:

我们先来了解一下编译过程中各个阶段的操作指令:


1. 预处理 选项 gcc -E test.c -o test.i

预处理完成之后就停下来,预处理之后产生的结果都放在test.i文件中。

2. 编译 选项 gcc -S test.c

编译完成之后就停下来,结果保存在test.s中。

3. 汇编 gcc -c test.c

汇编完成之后就停下来,结果保存在test.o中。


我们可以通过上述的各个指令来观察各个阶段。


下图是各个阶段会做的事情以及操作指令:



预处理详解:


预定义符号:

这些预定义符号都是语言内置的。

以上预定义符号如何使用呢?

参考下图:

 

#define :

#define 定义标识符

语法:

#define name stuff

stuff 只要合法都可以,数字 字符串甚至是一串代码

运用如下:


#define 定义宏


宏的申明方式:

#define name( parament-list ) stuff

其中的 parament-list 是一个由逗号隔开的符号表,它们可能出现在stuff中


注意:

参数列表的左括号必须与name紧邻。

如果两者之间有任何空白存在,参数列表就会被解释为stuff的一部分。

如何运用如下:



宏存在的一些问题:

注意:能加括号尽量加括号,避免出现歧义,造成错误。


避免出现下面这种情况:


#define 替换规则

我们都知道 #define会替换,那他替换有什么原则吗?如下:



相关文章
|
6天前
|
C语言
c语言循环设计程序结构
c语言循环设计程序结构
12 0
|
6天前
|
存储 算法 数据处理
C语言中的顺序结构程序
C语言中的顺序结构程序
9 1
|
8天前
|
程序员 C语言
使用指针变量作为函数参数的C语言程序实例
使用指针变量作为函数参数的C语言程序实例
17 0
|
9天前
|
安全 编译器 程序员
C语言(16)----预处理中的宏以及预处理指令
C语言(16)----预处理中的宏以及预处理指令
18 2
|
9天前
|
编译器 C语言 开发者
C语言的预处理
C语言的预处理
17 0
|
C语言 网络协议
C语言及程序设计进阶例程-8 预处理之宏定义
贺老师教学链接  C语言及程序设计进阶 本课讲解 宏定义 #include <stdio.h> #define PI 3.1415926 int main ( ) { float r,l,s,sq,vq; printf("please enter r:"); scanf("%f", &r); l=2 * PI *r; s=r * r * PI;
981 0
|
C语言
C语言预处理之二-----宏定义那点事儿
1、关于宏的副作用,请看下面代码:   #include stdio.h> #define GOODDEF (input+3) #define POORDEF input+3   //这里是宏的副作用最经典的例子,不穿裤子!!!如果你这样用,下面你就知错!! ...
970 0
|
1天前
|
C语言
C语言——assert函数
C语言——assert函数
|
1天前
|
算法 搜索推荐 C语言
深入了解C语言的qsort函数:原理及相关知识
深入了解C语言的qsort函数:原理及相关知识
13 1
|
1天前
|
C语言
C语言——oj刷题——模拟实现库函数strlen
C语言——oj刷题——模拟实现库函数strlen