C++基本东西说明.docx
《C++基本东西说明.docx》由会员分享,可在线阅读,更多相关《C++基本东西说明.docx(17页珍藏版)》请在冰豆网上搜索。
C++基本东西说明
.opt的说明:
在使用CX-Programmer编写完程序后,点击保存,这时会生成两个文件:
*.cxp和*.opt。
*.cxp是主程序文件,即程序。
*.opt是配置文件,记录系统工作环境信息。
如果再次打开*.cxp,对程序进行修改后再次保存,那么这时会生成第三个文件:
*.bak。
是备份文件,备份的是最近一次修改之前的程序。
注:
*.opt文件对客户应用来说,没有意义。
也就是说,在没有*.opt文件的情况下,程序文件*.cxp仍然可以正常打开。
而如果客户将*.cxp和*.opt拷贝到另一台电脑时可能遇到打不开*.cxp的情况,原因是*.opt记录的是原先那台电脑的系统工作环境信息,与现在的这台电脑的系统工作环境不一致。
这时只要删除*.opt即可。
*.bak的打开方式是:
打开CX-Programmer软件->文件->打开->文件类型选择所有->选中要打开的*.bak双击
OBJ文件:
程序编译时生成的中间代码文件
目标文件,一般是程序编译后的二进制文件,再通过链接器和资源文件链接就成exe文件了。
OBJ只给出了程序的相对地址,而EXE是绝对地址。
exe是可执行的二进制文件,obj是目标文件
可以简单理解如下:
由.cpp的源程序经过编译生成机器可理解执行的二进制文件,这个文件就是obj,但是不完整,需要经过链接器同cpp的标准库以及其他用户自己的库进行连接,多个obj文件生成一个exe。
因此可以把obj近似的看成exe的一部分(但实际上链接obj文件是很复杂的)
.h是头文件不能编译
.cpp是源文件能够编译
头文件包含了源文件中用到的一些函数和宏的定义
VC++中文件说明:
1.扩展名为dsw的文件类型,这种类型的文件在VC中是级别最高的,称为Workspace文件。
在VC中,应用程序是以Project的形式存在的,Project文件以.dsp扩展名,在Workspace文件中可以包含多个Project,由Workspace文件对它们进行统一的协调和管理。
2.扩展名为opt的文件类型,与dsw类型的Workspace文件相配合的一个重要的文件类型,这个文件中包含的是在Workspace文件中要用到的本地计算机的有关配置信息,所以这个文件不能在不同的计算机上共享,当我们打开一个Workspace文件时,如果系统找不到需要的opt类型文件,就会自动地创建一个与之配合的包含本地计算机信息的opt文件。
3扩展名为dsp的文件类型,这个文件中存放的是一个特定的工程,也就是特定的应用程序的有关信息,每个工程都对应有一个dsp类型的文件。
4.扩展名为clw的文件类型,用来存放应用程序中用到的类和资源的信息的,这些信息是VC中的ClassWizard工具管理和使用类的信息来源。
5.对应每个应用程序有一个readme.txt文件,这个文件中列出了应用程序中用到的所有的文件的信息,打开并查看其中的内容就可以对应用程序的文件结构有一个基本的认识。
6.扩展名为h和cpp的文件类型,,以h为扩展名的文件称为头文件。
以cpp为扩展名的文件称为实现文件,一般说来h为扩展名的文件与cpp为扩展名的文件是一一对应配合使用的,在h为扩展名的文件中包含的主要是类的定义,而在cpp为扩展名的文件中包含的主要是类成员函数的实现代码。
7.在应用程序中经常要使用一些位图、菜单之类的资源,VC中以rc为扩展名的文件称为资源文件,其中包含了应用程序中用到的所有的windows资源,要指出的一点是rc文件可以直接在VC集成环境中以可视化的方法进行编辑和修改。
8.最后要介绍的是以rc2为扩展名的文件,它也是资源文件,但这个文件中的资源不能在VC的集成环境下直接进行编辑和修改,而是由我们自己根据需要手工地编辑这个文件。
9.对于以ico,bmp等为扩展名的文件是具体的资源,产生这种资源的途径很多。
使用rc资源文件的目的就是为了对程序中用到的大量的资源进行统一的管理。
MFC:
微软基础类库,microsoftfoundationclass.它是对api的封装,以便我们使用
为了减少代码编写,微软把一些常用的类封装在一个库里,供大家公用,调用。
即MFC
MFC是微软的VC++带的视窗用的基本库。
MFC编程就是调用这个基本库,写出类似于IE浏览器这种程序,就是用鼠标,键盘为工具的人机会话式的程序。
学MFC的要点是会用visualStudio建程序框架,用VC++语言添加程序内容,编译和运行。
关键要会VC++。
AppWizard:
是用类别名称和源程序名产生Windows应用程序的一个工作向导,整装了程序并作成向导的程序产生器。
当你想要制作一些程序的时候,你便会用到AppWizard并能了解到它用途的广泛性。
不要把AppWizard和一个应用程序所产生的所有程序源码和产生器所生成的源程序弄混。
AppWizard生成的源码是在功能性应用程序框架里基础类别的最低限度要求。
AppWizard将帮助你很快地开始一个新的应用程序。
高级开发者可以建立订制的AppWizards。
微软公司已经为使用者透漏了它的后台程序源码以供程序员使用。
你可以根据你编程的需要重新设计一个新的设计规划以建立一个特别的自动化程序模型。
MFCAppWizard:
通过APPWIZARD可以创建MFC的应用程序不需要写一行代码就产生的一个应用程序框架然后我们要做的就是在程序中添加我们自己的代码这样MFC简化了我们对于界面的设计而且,MFC提供给了我们强大的类库,学过C++和MFC就知道这些类库了。
利用MFC的类库来来编程,重点学会MFC的程序结构建议先学习Windows程序设计,学会消息驱动的原理,然后就是MFC的类库结构。
win32系统:
是指你现在所使用的操作系统是32位的windows环境.如我们系统现在一般都是使用的32位运算方式,还有64位的系统,但现在用的不多.比如我们之前所知道的dos系统,就是16位的,比如一些我们曾经在DOS下运行的程序,把他们windows下运行,由于dos下运行的是16位的系统,所以,有的程序就会提示这个。
API:
(ApplicationProgrammingInterface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
WindowsAPI是一套用来控制Windows的各个部件的外观和行为的预先定义的Windows函数。
用户的每个动作都会引发一个或几个函数的运行以告诉Windows发生了什么。
这在某种程度上很像Windows的天然代码。
而其他的语言只是提供一种能自动而且更容易的访问API的方法。
当你点击窗体上的一个按钮时,Windows会发送一个消息给窗体,VB获取这个调用并经过分析后生成一个特定事件。
Win32Application和Win32ConsoleApplication的区别:
Win32Application和Win32ConsoleApplication都是工作在32位Windows环境的程序。
Win32Application是标准windows程序,完全拥有windows的特性,也即我们常说的窗口应用程序!
它通过GUI(GraphicsUserInterface图形用户接口)可以把窗口界面做得比较个性化,比如圆形的、不规则形状的等等,另外,我们还可以通过鼠标点击来完成控制。
所以说它是基于WINDOWS平台的32位开发环境开发应用程序(即,SDK程序)。
入口函数为WinMain()。
Win32ConsoleApplication(win32控制台应用程序)往往是像MS-DOS窗口(XP中叫命令提示符)的样子出现,我们得用键盘输入各种命令来使用它,它与纯dos程序区别是:
它是32位的;或者叫CUI(CharacterUserInterface字符用户接口)。
console程序以main()为入口,可以访问部分windowsAPI函数,比如创建窗口、对话框等等。
控制台程序是为了兼容DOS程序而设立的,这种程序的执行就好像在一个DOC窗口中执行一样,没有自己的界面。
INTEL的CPU有三种工作模式,实模式,保护模式,虚拟模式。
实模式是16位的,在这种模式下可工作纯DOC。
保护模式是32位的,WINDOWS就工作在这种模式下,为了使在32位保护模式下工作的WINDOWS可兼容16实模式下的DOC程序,又设立了虚拟模式,就是控制台程序。
控制台程序运行单个程序方便简洁明了!
很多VC初学者可能会常遇到如下链接错误:
Linking.../subsystem:
windows
LIBCD.lib(wincrt0.obj):
errorLNK2001:
unresolvedexternalsymbolWinMain@16
Debug/TestWin.exe:
fatalerrorLNK1120:
1unresolvedexternals
Errorexecutinglink.exe.
解决方法是:
将project-settings-link的projectoptions里的/subsystem:
windows改成/subsystem:
console
原因:
Win32Application的入口函数为WinMain ,Win32ConsoleApplication的入口函数是main ,换句话说,如果你编写传统的C程序,必须建立Win32Console程序,但VC里面默认的是Win32 Application,于是上面提及的链接错误就就经常出现了。
而Win32Application和Win32Console的区别就在于VC里链接参数不同。
头文件:
从以上结构图来看,头文件是用户应用程序和函数库之间的桥梁和纽带。
在整个软件中,头文件不是最重要的部分,但它是C语言家族中不可缺少的组成部分。
做一个不算很恰当的比喻,头文件就像是一本书中的目录,读者(用户程序)通过目录,可以很方便就查阅其需要的内容(函数库)。
在一本书中,目录固然重要,但绝对不是一本书的核心的、最重要的部分。
头文件和源文件区别:
首先,我们可以将所有东西都放在一个.cpp文件内.然后编译器就将这个.cpp编译成.obj,obj是什么东西?
就是编译单元了.一个程序,可以由一个编译单元组成,也可以有多个编译单元组成.如果你不想让你的源代码变得很难阅读的话,就请使用多个编译单元吧.(一个函数不能放到两个编译单元里面,但两个以上就可以分别放在一个单元,也就是cpp里面)那么就是一个.cpp对应一个.obj,然后将所有的obj链接起来(通过一个叫链接器的程序),组成一个.exe,也就是程序了.如果一个.cpp要用到另一个.cpp定义的函数怎么办?
只需在这个.cpp种写上他的函数声明就可以了.其余工作由链接器帮你完成,你可以随便调用该函数.链接器将所有的obj连接起来,但是如果碰巧有相同的函数或外部变量怎么办?
他如何识别?
一般来说是不能允许在同一个程序中,出现两个一样的函数名或外部变量名.但是只得庆幸的是,c++可以通过一种叫做链接属性的关键字来限定,你这个函数是属于整个程序公用的,还是只是在一个编译单元obj里面使用的.这些关键字就是extern和static;extern是外部链接的意思,也就是除了这个单元,外部的单元也是能够访问这个函数的.static是内部链接,自属于自己单元.说了这么久,还没有说.h的作用呢?
其实没有.h也能很好的工作,但是当你发现一个外部链接的函数或外部变量,需要许多份声明,因为c++这种语言,在使用函数和变量的时候,必须将他声明,为何要声明?
声明之后才知道他的规格,才能更好的发现不和规格的部分.你别妄想一个编译单元,会自动从另一个编译单元那里得到什么信息,知道你是如何定义这个函数的.所以说,只要使用到该函数的单元,就必须写一份声明在那个.cpp里面,这样是不是很麻烦,而且,如果要修改,就必须一个一个修改.这真让人受不了..h就是为了解决这个问题而诞生,他包含了这些公共的东西.然后所有需要使用该函数的.cpp,只需要用#include包含进去便可.以后需要修改,也只是修改一份内容.请注意不要滥用.h,.h里面不要写代码,.h不是.cpp的仓库,什么都塞到里面.如果在里面写代码,当其他.cpp包含他的时候,就会出现重复定义的情况,比如将函数func(){printf};放到头文件a.h,里面还有一些a.cpp需要的声明等;然后你发现b.cpp需要用到a.cpp里面的一个函数,就很高兴的将a.h包含进来.注意,#include并不是什么申请指令,他就是将指定的文件的内容,原封不动的拷贝进来.这时候实际上a.cpp和b.cpp都有一个func()函数的定义.如果这个函数是内部链接static的话,还好,浪费了一倍空间;如果是extern,外部链接(这个是默认情况),那么根据在同一个程序内不可出现同名函数的要求,连接器会毫不留情给你一个连接错误!
WinMain函数:
WinMain是Windows程序的入口点函数,与DOS程序的入口点函数main的作用相同,当WinMain函数结束或返回时,Windows应用程序结束。
WinMain函数的原型如下:
intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow);
WinMain函数参数意义:
Winmain函数接收4个参数,这些参数都是在系统调用WinMain函数时,由操作系统传递给应用程序的。
(1)hInstance参数hInstance表示该程序当前运行的实例的句柄,这是一个数值。
当程序在Windows下运行时,它唯一标识运行中的实例(注意,只有运行中的程序实例,才有实例句柄)。
一个应用程序可以运行多个实例,每运行一个实例,系统都会给该实例分配一个句柄值,并通过hInstance参数传递给WinMain函数。
(2)hPrevInstance参数hPrevInstance表示当前实例的前一个实例的句柄。
通过查看MSDN我们可以知道,在Win32环境下,这个参数总是NULL,即在Win32环境下,这个参数不再起作用。
(3)lpCmdLine参数lpCmdLine是一个以空终止的字符串,指定传递给应用程序的命令行参数。
例如:
在D盘下有一个sunxin.txt文件,当我们用鼠标双击这个文件时将启动记事本程序(notepad.exe),此时系统会将D:
\sunxin.txt作为命令行参数传递给记事本程序的WinMain函数,记事本程序在得到这个文件的全路径名后,就在窗口中显示该文件的内容。
要在VC++开发环境中向应用程序传递参数,可以单击菜单【Project】→【Settings】,选择“Debug”选项卡,在“Programarguments”编辑框中输入你想传递给应用程序的参数。
(4)nCmdShow参数nCmdShow指定程序的窗口应该如何显示,例如最大化、最小化、隐藏等。
这个参数的值由该程序的调用者所指定,应用程序通常不需要去理会这个参数的值。
参数nCmdShow的值可以为以下值之一:
SW_HIDE:
隐藏窗口并且激活另外一个窗口。
SW_MINIMIZE:
最小化指定的窗口,并且激活在系统表中的顶层窗口。
SW_RESTORE:
激活并显示窗口。
如果窗口已经最小化或最大化,系统将以恢复到原来的尺寸和位置显示窗口
(与SW_SHOWNORMAL相同)。
SW_SHOW:
激活一个窗口并以原来的尺寸和位置显示窗口。
SW_SHOWMAXIMIZED:
激活窗口并且将其最大化。
SW_SHOWMINIMIZED:
激活窗口并将其目标化。
SW_SHOWMINNOACTIVE:
将一个窗口显示为图标。
激活窗口维持活动状态。
SW_SHOWNA:
以窗口的当前状态显示窗口。
激活窗口保持活动状态。
SW_SHOWNOACTIVATE:
以窗口的最近一次的尺寸和位置显示窗口。
激活窗口维持激活状态。
SW_SHOWNORMAL:
激活并显示窗口。
如果窗口最大化或最小化,系统将其恢复到原来的尺寸和位置
(与SW_RESTORE相同)。
三、返回值如果函数成功,当它接收到一个WM_QUIT消息时就中止,函数应该返回在该消息的wParam参数的退出值。
如果函数在进入消息循环时退出,应该返回零。
当接收到一个WM_QUIT消息时,程序就中止。
这时,WinMain函数应退出应用程序,并且返回传递给WM_QUIT消息的wParam参数的值。
如果由于调用PostQuitMessage函数而接收到WM_QUIT消息,wParam的值是PostQuiMessage函数的nExitCode的值。
请参看“创建一个窗口循环”。
DLL文件动态链接库英文为DLL,是DynamicLinkLibrary的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。
动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。
函数的可执行代码位于一个DLL中,该DLL包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。
DLL还有助于共享数据和资源。
多个应用程序可同时访问内存中单个DLL副本的内容。
DLL是一个包含可由多个程序同时使用的代码和数据的库。
即动态链接库文件,是一种可执行文件,它允许程序共享执行特殊任务所必需的代码和其他资源。
Windows提供的DLL文件中包含了允许基于Windows的程序在Windows环境下操作的许多函数和资源。
...dll最好不要删,要不系统出什么问题不好搞,***.dll就是系统里面的关连文件啊...你想你把关连的线搞断了,后果会什么样
VC++编程中生成文件的用途及区别(如cpp,html,ncb,opt)
.APS:
存放二进制资源的中间文件,VC把当前资源文件转换成二进制格式,并存放在APS文件中,以加快资源装载速度。
资源辅助文件。
.BMP:
位图资源文件。
.BSC:
浏览信息文件,由浏览信息维护工具(BSCMAKE)从原始浏览信息文件(.SBR)中生成,BSC文件可以用来在源代码编辑窗口中进行快速定位。
用于浏览项目信息的,如果用sourcebrower的话就必须有这个文件。
可以在projectoptions里去掉GenerateBrowseInfoFile,这样可以加快编译进度。
.C:
用C语言编写的源代码文件。
.CLW:
ClassWizard生成的用来存放类信息的文件。
classwizard信息文件,ini文件的格式。
.CNT:
用来定义帮助文件中“Contents”的结构。
.CPP或.CXX:
用C++语言编写的源代码文件。
.CUR:
光标资源文件。
.DEF:
模块定义文件,供生成动态链接库时使用。
.DLG:
定义对话框资源的独立文件。
这种文件对于VC工程来说并非必需,因为VC一般把对话框资源放在.RC资源定义文件中。
.DSP:
VC开发环境生成的工程文件,VC4及以前版本使用MAK文件来定义工程。
项目文件,文本格式。
.DSW:
VC开发环境生成的WorkSpace文件,用来把多个工程组织到一个WorkSpace中。
工作区文件,与.dsp差不多。
.EXP:
由LIB工具从DEF文件生成的输出文件,其中包含了函数和数据项目的输出信息,LINK工具将使用EXP文件来创建动态链接库。
只有在编译DLL时才会生成,记录了DLL文件中的一些信息。
.H、.HPP或.HXX:
用C/C++语言编写的头文件,通常用来定义数据类型,声明变量、函数、结构和类。
.HLP:
Windows帮助文件。
.HM:
在Help工程中,该文件定义了帮助文件与对话框、菜单或其它资源之间ID值的对应关系。
.HPJ:
由HelpWorkshop生成的Help工程文件,用来控制Help文件的生成过程。
.HPG,生成帮助的文件的工程。
.ICO:
图标资源文件。
.ILK:
连接过程中生成的一种中间文件,只供LINK工具使用。
.INI:
配置文件。
.LIB:
库文件,LINK工具将使用它来连接各种输入库,以便最终生成EXE文件。
.LIC:
用户许可证书文件,使用某些ActiveX控件时需要该文件。
.MAK:
即MAKE文件,VC4及以前版本使用的工程文件,用来指定如何建立一个工程,VC6把MAK文件转换成DSP文件来处理。
.MAP:
由LINK工具生成的一种文本文件,其中包含有被连接的程序的某些信息,例如程序中的组信息和公共符号信息等。
执行文件的映像信息记录文件。
.MDP:
旧版本的项目文件,相当于.dsp
.NCB:
NCB是“NoCompileBrowser”的缩写,其中存放了供ClassView、WizardBar和ComponentGallery使用的信息,由VC开发环境自动生成。
无编译浏览文件。
当自动完成功能出问题时可以删除此文件。
编译工程后会自动生成。
.OBJ:
由编译器或汇编工具生成的目标文件,是模块的二进制中间文件。
.ODL:
用对象描述语言编写的源代码文件,VC用它来生成TLB文件。
.OLB:
带有类型库资源的一种特殊的动态链接库,也叫对象库文件。
.OPT:
VC开发环境自动生成的用来存放WorkSpace中各种选项的文件。
工程关于开发环境的参数文件。
如工具条位置信息等。
.PBI、.PBO和.PBT:
由VC的性能分析工具PROFILE生成并使用的三种文件。
.PCH:
预编译头文件,比较大,由编译器在建立工程时自动生成,其中存放有工程中已经编译的部分代码,在以后建立工程时不再重新编译这些代码,以便加快整个编译过程的速度。
.PDB:
程序数据库文件,在建立工程时自动生成,其中存放程序的各种信息,用来加快调试过程的速度。
记录了程序有关的一些数据和调试信息。
.PLG:
编译信息文件,编译时的error和warning信息文件。
.RC:
资源定义文件。
.RC2:
资源定义文件,供一些特殊情况下使用。
.REG:
注册表信息文件。
.RES:
二进制资源文件,资源编译器编译资源定义文件后即生成RES文件。
.RTF:
RichTextFormat(丰富文本格式)文档,可由Word或写字板来创建,常被用来生成Help文件。
.SBR:
VC编译器为每个OBJ文件生成的原始浏览信息文件,浏览信息维护工具(BSCMAKE)将利用SBR文件来生成BSC文件。
.TLB:
OLE库文件,其中存放了OLE自动化对象的数据类型、模块和接口定义,自动化服务器通过TLB文件就能了解自动化对象的使用方法。
.WAV:
声音资源文件。
一个工程是为了便于管理文件当一个源文件编译后会产生几个文件如.dsw.dsp等有一个工程这些文件就会在同一个工程文件夹下
初学者都是选win32控制台应用程序等开始学GUI后才选win32应用程序
之后有一个让你钩选预编译头文件的钩去掉并钩上空项目
再之后解决方案管理器那的源文件右键添加.cpp或.c文件就可以开始写代码了
#include<>和#include“”的区别:
<>引用的是编译器的类库路径里面的头文件
""引用的是你程序目录的相对路径中的头文件
假如你编译器定义的自带头文件引用在C:
\Keil\c51\INC\下面
则#