C语言的编译过程可分为四个阶段:
对源程序中的伪指令(即以#开头的指令)和特殊符号进行处理的过程。
伪指令包括:1)宏定义指令;
2)条件编译指令;
3)头文件包含指令;
编译就是将源程序转换为计算机可以执行的二进制代码。
说明:
在Linux下,目标文件的缺省后缀为.o
编译程序将通过词法分析和语法分析,将其翻译成为等价的汇编代码。
在使用gcc进行编译时,缺省情况下,不输出这个汇编代码的文件。如果需要,可以在编译时指定-S选项。这样,就会输出同名的汇编语言文件。
汇编的过程实际上是将汇编语言代码翻译成机器语言的过程。
产生一个扩展名为.o的目标文件。
将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件,当然,最后还可以用objcopy生成纯二进制码,也就是去掉了文件格式信息。(生成.exe文件)
(3)、error:invalid preprocessing directive #...
中文含义:非法的预处理命令#...
错误原因:该错误指明预处理器遇到了不可识别的 # 命令。
(4)、error:unterminated '#if' conditional
中文含义:'#if' 语句条件没有终止
错误原因:缺少 #endif 语句
(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)、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 语句中没有包含该函数的库。