‘壹’ c语言编译预处理
编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。
如果用一张图来表示:
读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理
[析] 伪指令主要包括以下四个方面
(1)宏定义指令,如#define Name TokenString,#undef等。对于前一个伪指令,预编译所要做的是将程序中的所有Name用TokenString替换,但作为字符串常量的Name则不被替换。对于后者,则将取消对某个宏的定义,使以后该串的'出现不再被替换。
(2)条件编译指令,如#ifdef,#ifndef,#else,#elif,#endif,等等。这些伪指令的引入使得程序员可以通过定义不同的宏来决定编译程序对哪些代码进行处理。预编译程序将根据有关的文件,将那些不必要的代码过滤掉
(3)头文件包含指令,如#include "FileName"或者#include 等。在头文件中一般用伪指令#define定义了大量的宏(最常见的是字符常量),同时包含有各种外部符号的声明。采用头文件的目的主要是为了使某些定义可以供多个不同的C源程序使用。因为在需要用到这些定义的C源程序中,只需加上一条#include语句即可,而不必再在此文件中将这些定义重复一遍。预编译程序将把头文件中的定义统统都加入到它所产生的输出文件中,以供编译程序对之进行处理。
包含到c源程序中的头文件可以是系统提供的,这些头文件一般被放在/usr/include目录下。在程序中#include它们要使用尖括号(<>)。另外开发人员也可以定义自己的头文件,这些文件一般与c源程序放在同一目录下,此时在#include中要用双引号("")。
(4)特殊符号,预编译程序可以识别一些特殊的符号。例如在源程序中出现的LINE标识将被解释为当前行号(十进制数),FILE则被解释为当前被编译的C源程序的名称。预编译程序对于在源程序中出现的这些串将用合适的值进行替换。
注意:
预编译程序所完成的基本上是对源程序的“替代”工作。经过此种替代,生成一个没有宏定义、没有条件编译指令、没有特殊符号的输出文件。这个文件的含义同没有经过预处理的源文件是相同的,但内容有所不同。下一步,此输出文件将作为编译程序的输出而被翻译成为机器指令。
‘贰’ 系统默认的c语言源程序文件的扩展名是什么
在Windows操作系统下,C语言源程序后缀为.c。
源程序,是指一系列人类可读的计算机语言指令。在现代程序语言中,源代码可以是以书籍或者磁带的形式出现;但最嫌悔常用的格式是文本文件,这种典型格式的目的是腔斗为了编译出计算机程序。
源程序文件类型是指源程序存储时使用的殊编码方式,伍者磨便于读取、识别。
目前,许多程序主要使用高级语言来开发,对于要求执行效率的部分使用低级语言编写,以达到开发效率与运行效率的折中。
‘叁’ C语言代码的头文件与源文件有什么区别
头文件和源文件在本质上没有任何区别。 只不过一般:后缀为 .h 的文件是头文件,内含函数声明、宏定义、结构体定义等内容。后缀为 .c 的文件是源文件,内含函数实现,变量定义等内容。而且是什么后缀也没有关系岁稿,只不过编译器会默认对某些后缀的文件采取某些动作。这样分开写成两个文件是一个良好的编程风格。
简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:
①预处理阶段
②词法与语法分析阶段
③ 编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各 个目标文件 (.obj文件)
④连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关 的可执行文件,当然,最桐谨后还可以用obj生成纯二进制码,也就是去掉了文件格 式信 息。(生成.exe文件)
3.比方说 在aaa.h里定义了一个函数的声明,然后在aaa.h的同一个目录下建立aaa.c , aaa.c里定义了这个函数的实现,然后是在main函数所在.c文件里#include这个aaa.h 然后我就可以使用这个函数了。 main在运行时就会找到这个定义了这个函数的aaa.c文件。这是因为:main函数为标准C/C++的程序入口,编译器会先找到该函数所在的文件。假定编译程序编译myproj.c(其中含main())时,发现它include了mylib.h(其中声明了函数void test()),那么此时编译器将按照事先设定的路径(Include路径列表及代码文件所在的路径)查找与之同名的实现文件(扩展名为.cpp或.c,此例中为mylib.c),如果找到该文件,并在其中找到该函数(此例中为void test())的实现代码,则继续编译;如果在指定目录找不到实现文件,或者在该文件及后续的各include文件中未找到实现代码,则返回一个编译错误.其实include的过程完全可以“看成”是一个乎轮孝文件拼接的过程,将声明和实现分别写在头文件及C文件中,或者将二者同时写在头文件中,理论上没有本质的区别。以上是所谓动态方式。对于静态方式,基本所有的C/C++编译器都支持一种链接方式被称为Static Link,即所谓静态链接。在这种方式下,我们所要做的,就是写出包含函数,类等等声明的头文件(a.h,b.h,...),以及他们对应的实现文件(a.cpp,b.cpp,...),编译程序会将其编译为静态的库文件(a.lib,b.lib,...)。在随后的代码重用过程中,我们只需要提供相应的头文件(.h)和相应的库文件(.lib),就可以使用过去的代码了。相对动态方式而言,静态方式的好处是实现代码的隐蔽性,即C++中提倡的“接口对外,实现代码不可见”。有利于库文件的转发.
‘肆’ c语言预编译时源文件(.cpp)通过include命令可以实现与头文件(.h)的合并,即两个文件合为一个文件再
分别编译,通过连接器将其连接,几个cpp文件不会合成为一个文件,头文件中的内容会在两个文件中分别出现,编译器会保留声明但未定义的符号,连接器在纤裂生成目标程序时若找不到对应符号是毁世闭报错,如果找到了就会把信息返空填入编译时留出的空内。
‘伍’ c语言编译后出现的文件后缀都是什么意思
.ilk 当选定渐增型编译连接时,连接器自动生成ILK文件,记录连接信息 x0dx0a.obj project中每个cpp经编译成为obj(object)文件,所有obj文件经链接(link)成为可执行文件。所以obj可称为目标文件或中间文件 .pch 预编译头文件(一般扩展名为.PCH),是把一个工程中较稳定的代码预先编译好放在一个文件(.PCH)里.这些预先编译好的代码可以是任何的C/C++代码--甚至可以是inline函数,只它们在整个工程中是较为稳定的,即在工程开发过程中不吵备会经常被修改的代码.x0dx0a.pdb 全称是 program debug database x0dx0a它在工程编拍锋译时自动生成, 程序运行时是不需要它的 x0dx0a但是,要debug代码时,需要加载它,否则不能调试 .exe 是最终编译生成的可执行文件 如果你程序编译完毕,可以升贺毁正常使用,可以只保留.exe文件,因为其它文件都是编译过程中间生成或用到的,执行时并不需要。
‘陆’ 初学c语言时,输入程序后运行,是执行还是预编译预编译是什么为什么最开始要有#include如
预编译是把一个工程中较稳定的代码预先编译好放在一个文件里.这些预先编译好的代码可以是任何的C/C++代码。而输入程序后的运行,只是将代码编译成了obj(object)文件,所有obj文件经链接(link)成为可执行文件。而你说的执行,应该就是点击最后生成的.exe文件了。开始要有的#include,是表明要包含的头文件,或者其它的保存的代码文件。只有这样,你才可以引用到那个文件中的代码,来供目前的文件来使用。
至于你说的什么大型游戏的编程,应该也是这样的一套,因为C语言就是上述生成文件的套路。游戏的编程,初学的话可以建议看《游戏编程入门》( 美 哈本),这本书基于windows平台,是为几乎没有游戏开发经验的初学者写的,循序渐进,从2D讲到3D 的一些基本技术,其中的例子也非常经典,看完书基本就可以做出不错的2D 游戏了,也有了一定的3D基础了,之后再看一些深入的书籍像《Windows游戏编程大师技巧》。
‘柒’ C语言源程序文件的后缀是什么,经过编译后生成文件的后缀是什么经过连接后生成文件的后缀是什么
程序文件名的后缀是.c,经过编译后是.obj,经过连接后是.exe。
xx.h文件.h中一般放的是同名.c文件中定义的变量、数组、函数的声明,需要让.c外部使用的声明。
xx.c文件.c文件一般放的是变量、数组、函数的具体定义。
1、头文件的预编译,预处理。
编译器在编译源代码时,会先编译头文件,保证每个头文件只被编译一次。
在预处理阶段,编译器将c文件中引用的头文件中的内容全部写到c文件中。
2、词法和语法分析(查错)。
3、编译(汇编代码,.obj文件)。
转化为汇编码,这种文件称为目标文件。后缀为.obj。
4、链接(二进制机器码,.exe文件)。
将汇编代码转换为机器码,生成可执行文件。
(7)c语言头文件预编译文件扩展阅读
注意事项
在编译过程中.h文件中的所有内容会被写到包含它的.c文件中,而所有的.c文件以一个共同的main函数作为可执行程序的入口。
在.h文件中编写函数实现依然可以正常编译执行,相当于所有.h的内容最后都被写到了main.c文件中。
但是为了逻辑性、易于维护性以及一些其他目的,一般在.h文件中写函数的声明,在.c文件中编写函数的实现。
‘捌’ C语言#include "stdafx.h"是什么啊求大神详解
答:#include 是丛厅哗预编译伏姿指令,"stdafx.h"说明是一个在渗行当前目录下名为stdafx的头文件。