美文网首页android ndk学习
c语言第三讲 程序环境和预处理

c语言第三讲 程序环境和预处理

作者: 大旺旺的弟弟小旺旺 | 来源:发表于2021-10-24 08:50 被阅读0次

程序的两种状态: 编译和链接过程
编译分为四大过程:

  • 预处理
  • 编译
  • 汇编
  • 链接

代码的两种状态

  • 翻译环境:源代码转换为机器指令
  • 执行环境:用于可以执行的代码

编译和链接过程

源代码被编译器编译为目标文件,然后给链接器,链接器会将链接的库和目标一起链接为一个可执行文件。

  • 预处理:
    完成宏替换,文件引入,去除空行注释等
    也就i是对各种预处理命令进行 处理,包括头文件的包含、宏定义的扩展、条件编译的选择等。
gcc -E test.c -o test.i
-E:完成预处理之后,停止后面的操作
-O:重定义,预编译之后输出的选项
  • 编译 :语法分析 语义分析
    目标即使将预编译之后的代码变为汇编的过程,他会检查代码的规范性,是否有语法错误
    编译执行的时候,先分析词法 语法 语义 中间代码
gcc -S test.c -o test.s
-S:在便编译之后停止后面的操作
  • 汇编:汇编之后将结果放入到.o文件中(汇编变为二进制)
gcc test.s -o test.o

链接就是将中间文件和库文件生成目标文件的过程。
链接

gcc test.o -o test
./test  //执行
···
## 程序执行的过程
- 程序载入内存中,一般通过操作系统完成,
- 程序开始执行的时候,调用main
- 开始执行代码:程序使用一个运行时堆栈,存储变量和返回地址
- mian执行完成退出

## 预处理
预处理的符号
- __FILE__:编译的源文件
- __LINE__:当前的行号
- __DATE__:编译的日期
- __TIME__:文件编译的时间

可以做如下操作:
```c
printf("line num %d",__LINE__)

标识符

  • #define
#define MAX 1000  定义一个值
#define i int //起别名
#define p printf("%d",109);
  • 定义宏
#define name(i) i*i 

举个例子

#sq(x)  x*x
int main(){
  sq(3+1);   //实际3+1*3+1
}

可以理解将后面的原封不动的复制过去。

宏和函数的区别

宏用来执行简单的运算,代码长度较短的。宏的执行速度更快,并且可以是不同的参数类型。但是宏的确定就不是不可以调试,与类型无关,不严谨,并且有优先级问题

条件编译

编译一个程序的时候,需要放弃某个语句

#if
#end if

举例

#define _DEBUG_ 1
#if _DEBUG_
#endif

相关文章

  • c语言第三讲 程序环境和预处理

    程序的两种状态: 编译和链接过程编译分为四大过程: 预处理 编译 汇编 链接 代码的两种状态 翻译环境:源代码转换...

  • 2019-03-12 计算机二级C语言程序设计之编译预处理和动态

    编译预处理 在C语言中,凡是以#号开头的,都称为“编译预处理”命令行。所谓“编译预处理”就是在C编译程序对C源程序...

  • 第三章、程序的

    程序的机器级表示: 程序编码: C语言 ---【预处理器】--->扩展后的C ---【编译器】---> 汇编语言 ...

  • GCC的编译过程和链接

    编译步骤 GCC 编译器在编译一个C语言程序时需要经过以下 4 步: 1. 预处理 将C语言源程序预处理,生成.i...

  • C语言003——基本概念

    C语言003——基本概念 一个简单的C程序基本具备如上所示的结构,包括:预处理指令,函数和语句。 预处理指令 在编...

  • iOS开发 -- C语言基础12(预处理指令)

    iOS开发 -- C语言基础12(预处理指令) 宏定义 预处理指令简介 1.C语言在对源程序进行编译之前,会先对一...

  • C 语言编译流程

    C语言编译四个阶段: 预处理、编译、汇编、链接。 预处理阶段:预处理器cpp根据字符#开头的命令,修改C程序。通常...

  • 2019-09-21C语言宏定义与预处理、函数与函数库

    1.C语言预处理理论 1.1、由源码到可执行程序的过程 (1)源码.c→(预处理)→预处理过的.i源文件→(编译)...

  • 我的C语言学习笔记

    第一个C语言程序: 1.#include 是C语言的预处理指令,所谓预处理指令就是在编译之前作得处理,通常以#开头...

  • C预处理器

    C预处理器 C预处理器处理程序的源代码,在编译之前运行,通常以符号#开头,C语言的预处理主要有3个方面的内容(下三...

网友评论

    本文标题:c语言第三讲 程序环境和预处理

    本文链接:https://www.haomeiwen.com/subject/zxlraltx.html