C语言的编译过程:

一、 C语言编译过程

C语言的编译过程可分为四个阶段:

1、预处理(Preprocessing)

对源程序中的伪指令(即以#开头的指令)和特殊符号进行处理的过程。

伪指令包括:1)宏定义指令;

      2)条件编译指令;

      3)头文件包含指令;

2、编译(Compilation)

编译就是将源程序转换为计算机可以执行的二进制代码。

说明:

  在Linux下,目标文件的缺省后缀为.o

  编译程序将通过词法分析和语法分析,将其翻译成为等价的汇编代码。

  在使用gcc进行编译时,缺省情况下,不输出这个汇编代码的文件。如果需要,可以在编译时指定-S选项。这样,就会输出同名的汇编语言文件。

3、汇编(Assembly)

汇编的过程实际上是将汇编语言代码翻译成机器语言的过程。

产生一个扩展名为.o的目标文件。

4、链接(Linking)

将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件,当然,最后还可以用objcopy生成纯二进制码,也就是去掉了文件格式信息。(生成.exe文件)

C语言在编译过程中常见的error或warning:

1、在预处理阶段:

(1)、 error:No such file or directory
   中文含义:没有相应文件或目录
   错误原因:编译器的搜索路径上找不到所需要的文件。该文件可能已在命令行 中指定,或在 #include 语句中说明。
(2)、error: macro or '#include' recursion too deep
中文含义:宏或'#include' 递归太深
错误原因:语句 #include 嵌套太深。当预处理器遇到太多嵌套的 #include 指令时,会导致此错误。通常该错误由两个或多个文件进行相互引用时,会引发无限递归。

(3)、error:invalid preprocessing directive #...

中文含义:非法的预处理命令#...
错误原因:该错误指明预处理器遇到了不可识别的 # 命令。

(4)、error:unterminated '#if' conditional
中文含义:'#if' 语句条件没有终止
错误原因:缺少 #endif 语句

2、在编译阶段:

(1)、error:'variable' undeclared (first use in this function)
中文含义:变量'variable' 没有声明(第一次使用此变量)
错误原因:你没有声明‘variable’;

(2)、error:conflicting types for 'Alex'
中文含义:对 'Alex' 变量存在突出类型
错误原因:前面可能已对 'Alex' 声明了其它数据类型。

(3)、error:too many types in declaration
中文含义:在声明中定义太多的类型

错误原因:少了逻辑运算符关系,关系运算符之类的符号

(4)、warning: comparison between pointer and integer
中文含义:警告:对指针和整型值进行比较可能没问题。此警告通常是由'if (strstr(line,"word") != NULL )' 之类的strstr 函数返回指针或空值。

编译时可能遇见的error或warning太多了,我只列出了几个;

3、在链接阶段:

(1)、error: file not recognized: File format not recognized
中文含义:文件不可识别:文件格式不可识别。
错误原因:文件扩展名不是 ‘.c’。
(2)、error:undefined reference to 'foo'
中文含义:没定义对'foo' 的引用。
错误原因:程序中使用了在本文件和其它库中没有定义的函数或变量。有可能是丢失了链接库,或使用了不正确的名字。

(3)、error:usr/lib/crt0.o: Undefined symbol _main referenced from textsegment
中文含义:从文本段引用没定义的_main 符号
错误原因:缺少 main()函数—但实际上有,为什么?
1.在头文件中可能存在语法错误;
2.在C 源文件中可能缺少gcc 命令

(4)、error:Undefined symbol _initscr referenced from text segment
中文含义:从文本段引用没定义的_initscr 符号
错误原因:调用了一个函数,但并没有该函数,或在#include 语句中没有包含该函数的库。

4、在运行阶段:

(1)、error while loading shared libraries:cannot open shared object file: No such file or directory
中文含义:装载共享库是出错:
不能打开共享对象文件:不存在该文件或目录
错误原因:程序中使用了共享库,但程序启动时通过动态链接找不到所需的共享库文件。如果确定存在,则请修改共享类库搜索路径变量值LD_LIBRARY_PATH。
(2)、error:Segmentation fault
中文含义:分段错误,总线错误
错误原因:企图访问受保护的内容或覆盖重要的数据! 它指明内存访问错误。
通常的原因如下:
1、反向引用一个空指针或没初始化的指针;
2、超出数组访问的下标;
3、对 malloc, free 和相关函数不正确的使用;
4、使用 scanf 时的参数(数量、类型)不正确。
(3)、error:floating point exception
中文含义:浮点运算异常
错误原因:这是个算术运算异常。如除数为0,上溢、下溢或非法的操作(如对-1 求平方根)。
(4)、error:Illegal instruction
中文含义:非法指令
错误原因:当系统遇到非法的机器指令时,产生此错误。通常此类错误是在源代码已编译成特定机器的目标代码后,又在其它类型的机器上运行时发生。

yo!peace!

C语言的编译过程常见的错误和警告相关推荐

  1. -i 可以编译添加多个_C语言的编译过程

    大家对C语言的编译过程可能有个大致的理解,但是,详细到每一步具体都干了啥,可能有的人不是很清楚啦,也包括我,要不然,就不会做笔记了,哈哈... 0.主要步骤 ① 步骤 编写源程序(.c) → 预处理 ...

  2. c语言的编译过程,从文本到可执行文件

    从文本文件到可执行文件 以hello world举例. #include<stdio.h> int main(){printf("hello,world!\n");re ...

  3. c语言的编译过程详解

    c语言的编译过程详解 IDE的使用让很多和我一样的人对C/C++可执行程序的底层生成一知半解,不利于我们深入理解原理.在这里小结一下,望路过的大神指正~ 前言:从一个源文件(.c文件)到可执行程序到底 ...

  4. Linux上C语言程序编译过程详解

    点击蓝字 关注我们 因公众号更改推送规则,请点"在看"并加"星标"第一时间获取精彩技术分享 来源于网络,侵删 本文将介绍如何将高层的C/C++语言编写的程序转换 ...

  5. 【C 语言】编译过程 分析 ( 预处理 | 编译 | 汇编 | 链接 | 宏定义 | 条件编译 | 编译器指示字 )

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  6. C语言程序编译过程 2

    C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接.编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程.链接是把目标文件.操作 ...

  7. .NET语言的编译过程:中间语言(IL)和即时编译器(JIT)

    .NET语言的编译分为两个阶段.首先高级语言被编译成一种称作IL的中间语言,与高级语言相比,IL更像是机器语言,然而,IL却包含一些抽象概念(比如:类.异常),这也是这种语言被称为中间语言的原因.IL ...

  8. Xcode中常见的错误,警告和解决方法

    1.Info.plist Utility Error: "Info.plist couldn't be opened because there is no such file" ...

  9. c语言编译生成cpp,C语言的编译过程

    编译: 编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序. 流程:C ...

最新文章

  1. IoT 、5G与边缘计算将会擦出怎样的火花?
  2. 【错误记录】Mac 中 IntelliJ IDEA 运行 Python 程序报错 ( No module named ‘numpy‘ )
  3. 漫谈 C++ 的各种检查
  4. c#winform演练 ktv项目 通过下标选中歌曲并且列表高亮
  5. 弱电箱只埋了一根网线时,如何上网和IPTV兼顾?
  6. 计算机专业毕业论文题目大全集
  7. JUC —— 常用辅助类
  8. 论文阅读《High-Definition Map Generation Technologies For Autonomous Driving: A Review》1
  9. 武职计算机网络技术专业,武汉职业技术学院计算机系
  10. 安装arm_qt交叉编译环境(亲测有效)
  11. OTT与IPTV的区别是什么?
  12. 软件测试周刊(第69期):说出观点需要勇气,说好笑则需求智慧。
  13. 汪子嵩:论有、存在与是(如是——真如)
  14. 【离散】如何利用顶点数求树叶或知树叶求顶点
  15. 2008春天在玉渊潭看到传说中的榆钱树
  16. 基于stm32的模拟楼道光控开关的实验
  17. 非线性方程线性化求参数的简单例子
  18. 2015南阳CCPC E - Ba Gua Zhen 高斯消元 xor最大
  19. 使用Flex实现常见布局的思路总结
  20. CHIL-ORACLE-修改密码

热门文章

  1. 小蓝本 第一本 《因式分解技巧》 第七章 综合运用 笔记 (第七天)
  2. Maven | filtering,filter和profile标签使用
  3. Hive2 beeline 使用方法
  4. Datawhale数据挖掘 数据分析笔记
  5. ipad键盘使用快捷键_每个iPad使用者都应该知道的20个键盘快捷键
  6. 微信小游戏开发能否突破4M限制
  7. C# 总结ManualResetEvent与AutoResetEvent【一】
  8. SSL协议和SET协议
  9. MySQL设置自增初始值和步长
  10. 2016年linux认证考试,2016年Linux认证考试复习要点辅导