预编译指令被包含文件的扩展名
.ilk 当选定渐增型编译连接时,连接器自动生成ILK文件,记录连接信息
.obj project中每个cpp经编译成为obj(object)文件,所有obj文件经链接(link)成为可执行文件。所以obj可称为目标文件或中间文件 .pch 预编译头文件(一般扩展名为.PCH),是把一个工程中较稳定的代码预先编译好放在一个文件(.PCH)里.这些预先编译好的代码可以是任何的C/C++代码--甚至可以是inline函数,只它们在整个工程中是较为稳定的,即在工程开发过程中不会经常被修改的代码.
.pdb 全称是 program debug database
它在工程编译时自动生成, 程序运行时是不需要它的
但是,要debug代码时,需要加载它,否则不能调试 .exe 是最终编译生成的可执行文件 如果你程序编译完毕,可以正常使用,可以只保留.exe文件,因为其它文件都是编译过程中间生成或用到的,执行时并不需要。
B. c++程序编译后自动生成的文件有什么用,分别解释下
1, PCH文件
预编译头文件(一般扩展名为.PCH),是把一个工程中较稳定的代码预先编译好放在一个文件(.PCH)里.这些预先编译好的代码可以是任何的C/C++代码--甚至可以是inline函数,只它们在整个工程中是较为稳定的,即在工程开发过程中不会经常被修改的代码.
为什么需要预编译头文件?一言以蔽之:提高编译速度.一般地,编译器以文件为单位编译,如果修改了一工程中的一个文件则所有文件都要重新编译,包括头文件里的所有东西(eg.Macro宏,Preprocessor预处理),而VC程序中,这些头文件中所包括的东西往往是非常大的,编译之将占很长的时间.但它们又不常被修改,是较稳定的,为单独的一个小文件而重新编译整个工程的所有文件导致编译效率下降,因此引入了.PCH文件.
如何使用预编译头文件以提高编译速度?要使用预编译头文件,必须指定一个头文件(.H),它包含我们不会经常修改的代码和其他的头文件,然后用这个头文件(.H)来生成一个预编译头文件(.PCH)VC默认的头文件就是StdAfx.h,因为头文件是不能编译的,所以我们还需要一个.CPP文件来作桥梁,VC默认的文件为StdAfx.cpp,这个文件里只有一句代码就是:#include "StdAfx.h".接下来要用它生成.PCH文件,涉及到几个重要的预编译指令:/Yu,/Yc,/Yx,/Fp.简单地说,/Yc是用来生成.PCH文件的编译开关.在Project->setting->C/C++的Category里的Precompiled Header,然后在左边的树形视图中选择用来编译生成.PCH文件的.CPP文件(默认即StdAfx.cpp)你就可以看到/Yc这个开关,它表示这个文件编译了以后是否生成.PCH文件(可能/Yc的c表示create)./Fp指令指定生成的.PCH文件的名字及路径(可能/Fp的p代表path)./Yu的u即use使用,工程中只要包括了.H文件的文件都会有这个/Yu指令.如果选择自动Automatic...的话则原来为/Yc的地方就换成了/Yx指令.如果选择自动,则每次编译时编译器会看以前有没有生成过.PCH文件,有则不现生成否则就再次编译产生.PCH文件.
注意:
A,实际上,由Appzard项目向导生成的默认的头文件及CPP文件StdAfx.h和StdAfx.cpp可以是任何名字的.原因很简单.但如果你要这样做就要记得修改相应的Project->setting...下的几个预编译指令(/Yc,/Yu,/Yx,/Fp)的参数.
B.在任何一个包括了将要预编译的头文件而使用了.PCH文件的工程文件的开头,一定必须要是在最开头,你要包含那个指定生成.PCH文件的.H文件(通过.CPP文件包括,默认为StdAfx.cpp),如果没包括将产生我最开头产生的错误.如果不是在最开头包括将产生让你意想不到的莫名其妙错误,如若不信,盍为试之?
C.预编译文件.PCH生成之很耗时间,而且生成之后它也很占磁盘空间,常在5-6M,注意项目完成之后及时清理无用的.PCH文件以节约磁盘空间.
D.如果丢了或删了.PCH文件而以后要再修改工程文件时,可将指定的/Yc的.CPP文件(默认为StdAfx.cpp)重新编译一次即可再次生成.PCH文件,不用傻傻的按F7或Rebuild All
2, NCB文件
.ncb 无编译浏览文件(no compile browser)。当自动完成功能出问题时可以删除此文件。build后会自动生成
3, OBJ文件
目标文件,一般是程序编译后的二进制文件,再通过链接器和资源文件链接就成exe文件了。
OBJ只给出了程序的相对地址,而EXE是绝对地址。
4, PDB文件
程序数据库 (PDB) 文件保存着调试和项目状态信息,使用这些信息可以对程序的调试配置进行增量链接。当以 /ZI 或 /Zi(用于 C/C++)生成时,将创建一个 PDB 文件。
在 Visual C++ 中,/Fd 选项用于命名由编译器创建的PDB 文件。当使用向导在Visual Studio 中创建项目时,/Fd 选项被设置为创建一个名为 project.PDB 的 PDB。
如果使用生成文件创建 C/C++ 应用程序,并指定 /ZI 或 /Zi 而不指定 /Fd 时,则最终将生成两个 PDB 文件:
*VC80.PDB (更笼统地说就是 VCx0.PDB,其中 x 表示 Visual C++ 的版本。)该文件存储各个 OBJ 文件的所有调试信息并与项目生成文件驻留在同一个目录中。
*project.PDB 该文件存储 .exe 文件的所有调试信息。对于C/C++,它驻留在 \debug 子目录中。
每当创建 OBJ 文件时,C/C++ 编译器都将调试信息合并到 VCx0.PDB 中。插入的信息包括类型信息,但不包括函数定义等符号信息。因此,即使每个源文件都包含公共头文件(如 <windows.h>),这些头文件中的 typedef 也只存储一次,而不是在每个 OBJ 文件中都存在。
链接器将创建 project.PDB,它包含项目的 EXE 文件的调试信息。project.PDB文件包含完整的调试信息(包括函数原型),而不仅仅是在 VCx0.PDB 中找到的类型信息。这两个 PDB 文件都允许增量更新。链接器还在其创建的 .exe 或 .dll 文件中嵌入 .pdb 文件的路径。
Visual Studio 调试器使用 EXE 或 DLL 文件中的PDB 路径查找 project.PDB 文件。如果调试器在该位置无法找到 PDB 文件或者如果路径无效(例如,如果项目被移动到了另一台计算机上),调试器将搜索包含 EXE 的路径,即在“选项”对话框(“调试”文件夹,“符号”节点)中指定的符号路径。调试器不会加载与所调试的二进制不匹配的 PDB。
5, ILK文件
在增量链接时,LINK 更新在第一次增量链接期间创建的 .ilk 状态文件。该文件和 .exe文件或 .dll 文件具有相同的基名称,并具有扩展名 .ilk。在后面的增量链接期间,LINK 更新 .ilk 文件。如果缺少 .ilk 文件,则 LINK 执行完全链接并创建新的 .ilk 文件。如果 .ilk 文件无法使用,则 LINK 执行非增量链接。有关增量链接的详细信息,请参见渐进式链接(/INCREMENTAL) 选项。
6, MAP文件
Windows和linux系统下都有map文件,map文件一般是用来保存符号的地址信息。这里的符号一般是指函数名及变量(局部、全局)。根据这个地址信息,便可以把地址翻译成相应的符号,很多系统工具、debug方法都要用到这种信息。
(一)一个程序编译完以后内容会分成两大类保存,一类是code,一类是data:
(1)code指程序代码,常存在.text section
(2)data指存程序中声明的变量,常存在.data section,未初始化的变量会被存在.bss section。
(二)Windows
(1)单个模块的map文件
在Windows下每一个模块(dll/exe)对应一个map文件,只需编译时打开相应的选项即可。
visual studio中方法:右击工程,选择Properties,然后选择 Configuration Properties -Linker - Debugging,将Generate Map File项改成Yes。
编译后在debug/release目录里便可以找到与应用程序同名的map文件。
如下为map文件内容:
Timestamp is4b9603e2 (Tue Mar 09 16:16:34 2010) //这个是时间戳,每次编译都不同,后面符号对应的地址一般也不同。
Preferred loadaddress is 00010000 //这是编译时的预装载地址,实际上模块被加载的地址可能跟这个不同,所以来确定某个地址对应哪个符号信息的时候,还需要知道该模块加载在内存的真正起始地址,然后根据偏移量来确定。
Start Length Name Class
0001:00000000 001c3950H .text CODE ==》存放程序代码
0003:000008b8000af67cH .data DATA ==》初始化的变量
0003:000aff40003930b1H .bss DATA ==》未初始化的变量
(2)操作系统总的map文件:不知道有没有。
(3)mpbin
mpbin是一个反汇编工具,可以输出exe/dll文件的许多信息。
mpbin /allyourmolename > a.txt 可以把所有的信息保存在一个a.txt中,里面可以找到时间戳、原debug路径信息及函数列表等。
如下:
FILE HEADERVALUES
1C2 machine (Thumb)
6 number of sections
49EC0BAE time date stamp Mon Apr 2013:44:14 2009 //时间戳
0 file pointer to symbol table
0 number of symbols
E0 size of optional header
2102 characteristics
Executable
32 bit word machine
DLL
OPTIONAL HEADERVALUES
10B magic # (PE32)
9.00 linker version
53E00 size of code
76A00size of initialized data
0 size of uninitialized data
502ACentry point (100502AC)
1000 base of code
55000 base of data
10000000 image base (10000000 to100CDFFF)
1000 section alignment
200 file alignment
5.01 operating system version
0.00 image version
5.01 subsystem version
0 Win32 version
CE000 size of image
400 size of headers
其中 10000000 image base (10000000 to 100CDFFF)是重要的信息,与map file中的 Preferred load address is10000000 意义相同。
DebugDirectories
Time Type Size RVA Pointer
-------- ------ -------- -------- --------
49EC0BAE cv 81 000020FC CFC Format: RSDS, {A5C699F0-C26D-427E-BC54-3504731BA9B8}, 1,d:\Projects\Final\MyUsbToPc_CPL\MyUsbToPc\Windows Mobile 6 Professional SDK(ARMV4I)\Debug\MyUsbToPc.pdb //原编译路径
Begin End Prolog Excpt 32bit Fixup 【Function Name】
0000000010001000 10001040 10001010 N Y Y DllMain
0000000810001040 10001064 10001050 N Y Y ?InitApplet@@YAHPAUHWND__@@@Z (int __cdecl InitApplet(struct HWND__*))
0000001010001064 10001068 10001064 N Y Y ?TermApplet@@YAXXZ (void __cdecl TermApplet(void))
0000001810001068 100013DC 10001078 N Y Y CPlApplet
00000020 1000141C 100014B4 10001420 N Y Y _DllMainCRTStartup
00000028100014B4 100014BC 100014B4 N Y Y GetCurrentProcess
00000030100014BC 100014F0 100014C0 N Y Y
00000038 100014F0 1000155C 100014F4 N Y Y _cinit
00000040 1000155C 10001660 10001560 N Y Y
0000004810001660 10001678 10001664 N Y Y exit
0000005010001678 10001690 1000167C N Y Y _exit
0000005810001690 100016AC10001694 N Y Y _cexit
00000060 100016AC 100016F8 100016B0 N Y Y _c_exit
begin栏对应的地址与map里的地址是一致的,非常类似于map文件。
【注意:很多exe或dll在编译时时将此信息隐藏的,Function Name会变成空的】
(三)Linux
(1)单个模块的map文件
暂还不清楚,大家知道的请告知。
(2)操作系统总的map文件
linux系统编译Image后会生成一个system.map,里面存了被编译进内核的符号信息,不同次的编译生成的system.map会有差异。
因为是操作系统的符号信息,装载的地址都是固定的,所以不像windows单个模块那样靠偏移量定位,直接通过地址就可以直接找到对应的符号。
其内容的重要的几个符号如下:
_stext//代码段开始
_etext//代码段结束
__data_start//初始化的数据开始
_edata//初始化的数据结束
__bss_start//未初始化数据开始
_end//全部结束
Linux相对windows有个很重要的不同是,linux启动后在proc\kallsyms里也有一份类似Map文件的信息,cat命令可看到其内容,有了这个就可以得到任何一个内核的符号(变量及函数名)的地址信息,而不需要在编译完内核后特意保存map文件,这真是一个巨大的宝藏。
而且,proc\kallsym的信息比system.map多,在最后会有mole部分的符号信息,这些信息会随着系统的变化而变化。
(3)nm命令
nm命令用来显示某个可执行文件的符号信息。符号信息中会包含全局变量(比如下面的xyz)和函数名(比如下面的main),还有一些编译器插入的符号(比如下面的__data_start,__bss_start)
第二列表示符号的属性,其中大写代表global,小写代表local
Usage: nm[option(s)] [file(s)]
List symbols in[file(s)] (a.out by default).
示例:
nm helo
08049f20 d_DYNAMIC
08049ff4 d_GLOBAL_OFFSET_TABLE_
080484ec R_IO_stdin_used
w _Jv_RegisterClasses
08049f10 d__CTOR_END__
08049f0c d__CTOR_LIST__
08049f18 D__DTOR_END__
08049f14 d__DTOR_LIST__
08048500 r__FRAME_END__
08049f1c d__JCR_END__
08049f1c d__JCR_LIST__
0804a020 A__bss_start
0804a00c D__data_start
080484a0 t __do_global_ctors_aux
08048340 t__do_global_dtors_aux
0804a010 D__dso_handle
w __gmon_start__
0804849a T __i686.get_pc_thunk.bx
08049f0c d__init_array_end
08049f0c d__init_array_start
08048430 T__libc_csu_fini
08048440 T__libc_csu_init
U __libc_start_main@@GLIBC_2.0
0804a020 A _edata
0804a028 A _end
080484cc T _fini
080484e8 R_fp_hw
08048298 T _init
08048310 T_start
0804a020 bcompleted.6635
0804a00c Wdata_start
0804a024 bdtor_idx.6637
080483a0 t frame_mmy
080483c4 T main
U printf@@GLIBC_2.0
0804a014 D x
0804a018 D y
0804a01c D z
helo.c如下:
#include<stdio.h>
int x = 10;
int y = 20;
int z = 30;
extern int__data_start;//这里引用了编译器插入的符号
int main(void)
{
int *ds = &__data_start;
printf("%p\n", ds);
printf("now x = %d\n", x);
ds+=3;
*ds = 100;
printf("now x = %d\n", x);
}
7, IDB文件
The compiler savesstate information from the first compile in the project’s .IDB file (the default name is project.IDB or VC60.IDBfor files compiled without a project).
The compiler usesthis state information to speed subsequent compiles.
8, SLN文件
Visual Studio.Solution 通过为环境提供对项目、项目项和解决方案项在磁盘上位置的引用,可将它们组织到解决方案中。
C. include<stdi.h>是正确的编译预处理命令吗
不是。
程序设计语言的预处理的概念:在编译之前进行的处理。C语言的预处理主要有三个方面的内容:1.宏定义;2.文件包含;3.条件编译。预处理命令以符号#开头。
编译时以包含处理以后的文件为编译单位,被包含的文件是源文件的一部分。
编译以后只得到一个目标文件.obj。
被包含的文件又被称为标题文件或头部文件、头文件,并且常用.h作扩展名。
修改头文件后所有包含该文件的文件都要重新编译。
头文件的内容除了函数原型和宏定义外,还可以有结构体定义,全局变量定义。
D. C语言源程序文件的后缀是什么,经过编译后生成文件的后缀是什么经过连接后生成文件的后缀是什么
C语言源文件后缀名是.c,编译生成的文件后缀名是.obj,连接后可执行文件的后缀名是.exe。
源文件的后缀仅仅是为了表明该文件中保存的是某种语言的代码(例如.c文件中保存的是C语言代码),这样程序员更加容易区分,编译器也更加容易识别,它并不会导致该文件的内部格式发生改变。
(4)预编译指令被包含文件的扩展名扩展阅读
C语言是一种结构化语言,它有着清晰的层次,可按照模块的方式对程序进行编写,十分有利于程序的调试,且c语言的处理和表现能力都非常的强大。
依靠非常全面的运算符和多样的数据类型,可以轻易完成各种数据结构的构建,通过指针类型更可对内存直接寻址以及对硬件进行直接操作,因此既能够用于开发系统程序,也可用于开发应用软件。
C语言是普适性最强的一种计算机程序编辑语言,它不仅可以发挥出高级编程语言的功用,还具有汇编语言的优点。
E. 请问c++中的#include "stdafx.h"是什么意思
#include "stdafx.h"
是预编译处理器把stdafx.h文件中的内容加载到程序中来。
stdafx.h
1名称的英文全称为:Standard Application Fram Extend
所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。
预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectname.pch。
编译器通过一个头文件stdafx.h来使用预编译头文件。stdafx.h这个头文件名是可以在project的编译设置里指定的。编译器认为,所有在指令#include "stdafx.h"前的代码都是预编译的,它跳过#include "stdafx. h"指令,使用projectname.pch编译这条指令之后的所有代码。
因此,所有的MFC实现文件第一条语句都是:#include "stdafx.h"。
2 详细工作原理及作用
stdafx.h中没有函数库,只是定义了一些环境参数,使得编译出来的程序能在32位的操作系统环境下运行。
Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程序也要花费相当长的时间来完成工作。由于每个.CPP文件都包含相同的include文件,为每个.CPP文件都重复处理这些文件就显得很傻了。
为避免这种浪费,AppWizard和VisualC++编译程序一起进行工作,如下所示:
◎AppWizard建立了文件stdafx.h,该文件包含了所有当前工程文件需要的MFCinclude文件。且这一文件可以随被选择的选项而变化。
◎AppWizard然后就建立stdafx.cpp。这个文件通常都是一样的。
◎然后AppWizard就建立起工程文件,这样第一个被编译的文件就是stdafx.cpp。
◎当VisualC++编译stdafx.cpp文件时,它将结果保存在一个名为stdafx.pch的文件里。(扩展名pch表示预编译头文件。)
◎当VisualC++编译随后的每个.cpp文件时,它阅读并使用它刚生成的.pch文件。VisualC++不再分析Windowsinclude文件,除非你又编辑了stdafx.cpp或stdafx.h。
这个技术很精巧,你不这么认为吗?(还要说一句,Microsoft并非是首先采用这种技术的公司,Borland才是。)在这个过程中你必须遵守以下规则:
◎你编写的任何.cpp文件都必须首先包含stdafx.h。
◎如果你有工程文件里的大多数.cpp文件需要.h文件,顺便将它们加在stdafx.h(后部)上,然后预编译stdafx.cpp。
◎由于.pch文件具有大量的符号信息,它是你的工程文件里最大的文件。
如果你的磁盘空间有限,你就希望能将这个你从没使用过的工程文件中的.pch文件删除。执行程序时并不需要它们,且随着工程文件的重新建立,它们也自动地重新建立。
3 如何理解其原理
通俗一点说
当我们使用AppWizard来自动生成某些项目的时候,系统会自动把所需要include的头文件在stdafx.h中先include一下,这样,我们只需要直接include这个stdafx.h文件即可.因为同一个项目中的不同源文件CPP都包含相同的include文件,这样,为每个.CPP文件都重复include这些文件就显得很傻了。当然如果你不用MFC的话就不用了。即:在每个.cpp文件中都include stdafx.h 就相当于包含了其他的如iostream.h等文件
4 与stdio.h的区别
我们一般用TC或vc编译C程序的时候都要首先包含这个stdio.h头文件,这个头文件里面包含了scanf和printf函数的定义,如果我们不在程序开头include这个文件,那么你调用上面这两个函数就不会成功,它其实和c++中的iostream.h文件的作用差不多的,它们一般都已经在stdafx.h文件中被包含。
F. 67. 文件包含命令中被包含的文件的扩展名( )。 A. 必须是.h
当然是.h文件了 一般头文件为 #include <stido.h>等等
G. c语言中#include "stdio.h"是什么
你刚开始学习C语言吗? 呵呵
没关系 慢慢来
#表示预处理
#include "stdio.h"
#include "math.h"
main()
{
double x,s;
printf("input number:\n");
scanf("%lf",&x);
s=sin(x);
printf("sine of %lf is %lf\n",x,s);
}
预处理命令还有其它几种,这里的include 称为文件包含命令,其意义是把尖括号""或引号<>内指定的文件包含到本程序来,成为本程序的一部分。被包含的文件通常是由系统提供的,其扩展名为.h。因此也称为头文件或首部文件。C语言的头文件中包括了各个标准库函数的函数原型。因此,凡是在程序中调用一个库函数时,都必须包含该函数原型所在的头文件。在本例中,使用了三个库函数:输入函数scanf,正弦函数sin,输出函数printf。sin函数是数学函数,其头文件为math.h文件,因此在程序的主函数前用include命令包含了math.h。scanf和printf是标准输入输出函数,其头文件为stdio.h,在主函数前也用include命令包含了stdio.h文件。
H. include stdafx.h 是什么意思
#include "stdafx.h"
是预编译处理器把stdafx.h文件中的内容加载到程序中来。
stdafx.h
1名称的英文全称为:Standard Application Fram Extend
所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。
预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectname.pch。
编译器通过一个头文件stdafx.h来使用预编译头文件。stdafx.h这个头文件名是可以在project的编译设置里指定的。编译器认为,所有在
指令#include "stdafx.h"前的代码都是预编译的,它跳过#include "stdafx.
h"指令,使用projectname.pch编译这条指令之后的所有代码。
因此,所有的MFC实现文件第一条语句都是:#include "stdafx.h"。
2 详细工作原理及作用
stdafx.h中没有函数库,只是定义了一些环境参数,使得编译出来的程序能在32位的操作系统环境下运行。
Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程序也要花费相当长的时间来完成工作。由于每个.CPP文件都包含相同的include文件,为每个.CPP文件都重复处理这些文件就显得很傻了。
为避免这种浪费,AppWizard和VisualC++编译程序一起进行工作,如下所示:
◎AppWizard建立了文件stdafx.h,该文件包含了所有当前工程文件需要的MFCinclude文件。且这一文件可以随被选择的选项而变化。
◎AppWizard然后就建立stdafx.cpp。这个文件通常都是一样的。
◎然后AppWizard就建立起工程文件,这样第一个被编译的文件就是stdafx.cpp。
◎当VisualC++编译stdafx.cpp文件时,它将结果保存在一个名为stdafx.pch的文件里。(扩展名pch表示预编译头文件。)
◎当VisualC++编译随后的每个.cpp文件时,它阅读并使用它刚生成的.pch文件。VisualC++不再分析Windowsinclude文件,除非你又编辑了stdafx.cpp或stdafx.h。
这个技术很精巧,你不这么认为吗?(还要说一句,Microsoft并非是首先采用这种技术的公司,Borland才是。)在这个过程中你必须遵守以下规则:
◎你编写的任何.cpp文件都必须首先包含stdafx.h。
◎如果你有工程文件里的大多数.cpp文件需要.h文件,顺便将它们加在stdafx.h(后部)上,然后预编译stdafx.cpp。
◎由于.pch文件具有大量的符号信息,它是你的工程文件里最大的文件。
如果你的磁盘空间有限,你就希望能将这个你从没使用过的工程文件中的.pch文件删除。执行程序时并不需要它们,且随着工程文件的重新建立,它们也自动地重新建立。
3 如何理解其原理
通俗一点说
当我们使用AppWizard来自动生成某些项目的时候,系统会自动把所需要include的头文件在stdafx.h中先include一下,这样,我
们只需要直接include这个stdafx.h文件即可.因为同一个项目中的不同源文件CPP都包含相同的include文件,这样,为每个.CPP文
件都重复include这些文件就显得很傻了。当然如果你不用MFC的话就不用了。即:在每个.cpp文件中都include stdafx.h
就相当于包含了其他的如iostream.h等文件
4 与stdio.h的区别
我们一般用TC或vc编译C程序的时候都要首先包含这个stdio.h头文件,这个头文件里面包含了scanf和printf函数的定义,如果我们不在程
序开头include这个文件,那么你调用上面这两个函数就不会成功,它其实和c++中的iostream.h文件的作用差不多的,它们一般都已经在
stdafx.h文件中被包含。
I. c++语言当中的编程:#include“pch.h”。这段话是什么意思呢
将“pch.h”这个库函数里面的函数定义和实现包含到当前的C++源代码中,使得当前代码中可以直接调用库函数“pch.h”中的所有公有函数。
include是一个计算机专业术语,一指C/C++中包含头文件命令,用于将指定头文件嵌入源文件中。
include包含指令不仅仅限于.h头文件,可以包含任何编译器能识别的C/C++代码文件,包括.c、.hpp、.cpp、.hxx、.cxx等,甚至.txt、.abc等等都可以。
预处理器发现 #include 指令后,就会寻找指令后面<>中的文件名,并把这个文件的内容包含到当前文件中。被包含文件中的文本将替换源代码文件中的#include 指令, 就像你把被包含文件中的全部内容键入到源文件中的这个位置一样。
(9)预编译指令被包含文件的扩展名扩展阅读:
C++常用 include头文件:
#include <assert.h> //设定插入点
#include <ctype.h> //字符处理
#include <errno.h> //定义错误码
#include <float.h> //浮点数处理
#include <fstream.h> //文件输入/输出
#include <iomanip.h> //参数化输入/输出
#include <iostream.h> //数据流输入/输出
#include <limits.h> //定义各种数据类型最值常量
#include <locale.h> //定义本地化函数
#include <math.h> //定义数学函数
#include <stdio.h> //定义输入/输出函数
#include <stdlib.h> //定义杂项函数及内存分配函数
#include <string.h> //字符串处理
#include <strstrea.h> //基于数组的输入/输出
#include <time.h> //定义关于时间的函数
#include <wchar.h> //宽字符处理及输入/输出
#include <wctype.h> //宽字符分类
J. 在使用include命令时被包含的文件以()作扩展名 A 必须以 .h B 不能用 .h C 不一定以 .h D 必须以 .c
C是对的#include<stdio.h>#include"init.c"这两种都是可以的