【让你从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会替换,那他替换有什么原则吗?如下:



相关文章
|
1月前
|
C语言
最简单的C语言程序示例
最简单的C语言程序示例
20 0
|
15天前
|
存储 编译器 C语言
深入探索C语言动态内存分配:释放你的程序潜力
深入探索C语言动态内存分配:释放你的程序潜力
28 0
|
1月前
|
存储 Serverless C语言
C语言程序的结构
C语言是一种广泛使用的编程语言,其程序结构清晰,易于理解。下面我们将详细探讨C语言程序的基本结构,并通过一个示例代码来展示这些组成部分是如何协同工作的。 一、C语言程序的基本结构
14 0
|
1月前
|
程序员 C语言
最简单的C语言程序举例
C语言是一种广泛使用的计算机编程语言,适合用于系统编程,也可以用于编写应用程序。它的语法清晰明了,功能强大,是很多程序员的首选语言。下面,我们将通过一个最简单的C语言程序来介绍其基本结构和语法。
26 0
|
1月前
|
前端开发 Unix Linux
Linux indent命令 (格式化C语言源代码的程序)
Linux indent命令 (格式化C语言源代码的程序)
18 0
Linux indent命令 (格式化C语言源代码的程序)
|
C语言 编译器
《C语言编程初学者指南》一1.6 使用指令
本节书摘来自华章出版社《C语言编程初学者指南》一书中的第1章,第1.6节,作者【美】Keith Davenport(达文波特) , M1ichael Vine(维恩),更多章节内容可以访问云栖社区“异步社区”公众号查看 1.6 使用指令 下面再看看本章一开始给出的示例程序。
1458 0
|
13天前
|
程序员 C语言
C语言库函数 — 内存函数(含模拟实现内存函数)
C语言库函数 — 内存函数(含模拟实现内存函数)
24 0
|
24天前
|
编译器 C语言 C++
【C语言】memset()函数(内存块初始化函数)
【C语言】memset()函数(内存块初始化函数)
26 0
|
24天前
|
编译器 C语言 C++
【C语言】memcpy()函数(内存块拷贝函数)
【C语言】memcpy()函数(内存块拷贝函数)
42 0
|
25天前
|
C语言 C++
【C语言】rand()函数(如何生成指定范围随机数)
【C语言】rand()函数(如何生成指定范围随机数)
16 0