静态函数和静态变量具有相同的使用范围限制。
当试图从文件外部方位任何没有在该文件内声明的静态变量时将导致编译错误或 LNK2001 错误。
2、由于编译和联机的设置而造成的 LNK2001 错误1)如果编译时使用的时/NOD/NODERAULTLIB选项,程序所需要的运行库和 MFC 时将得到又编译器写入目标文件模块,但除非在文件中明确包含这些库名,否则这些库不会北链接进工程文件。
这种情况下使用/NOD 将导致 LNK2001 错误2)如果没有为 wWinMainCRTStartup 设定程序入口,在使用 Unicode 和 MFC 时讲的到“unresolved external on _WinMain16”的 LNK2001 错误信息。
使3) 用 /MD 选项编译时,既然所有的运行库都被保留在动态链接库之内,源文件中对“func”的引用,在目标文件里即对“__imp__func”的引用。
如果试图使用静态库 LIBC.LIB 或LIBCMT.LIB 进行链接,将在__imp__func 上发生 LNK2001 错误。
如果不使用/MD 选项编译,在使用 MSVCxx.LIB 链接时也会发生 LNK2001 错误。
4)使用/ML 选项编译时,如用 LIBCMT.LIB 链接回在_errno 上发生 LNK2001 错误。
5)当编译调试版的应用程序时,如果采用发行版模态库进行链接也会产生 LNK2001 错误;同样,使用调试版模态库链接发行版应用程序时也会产生相同的错误。
6)不同版本的库和编译器的混合使用也能产生问题,因为新版的库里可能包含早先的版本没有的符号和说明。
7)在不同的模块中使用内联和非内联的编译选项能够导致 LNK2001 错误。
如果创建 C库时打开了函数内联/Ob1 或/Ob2,但是在描述该函数的相应头问卷安里却关闭了函数内联没有 inline 关键字,只是将得到错误信息。
为避免该问题的发生,应该在相应的头文件中用 inline 关键字标志为内联函数。
8)不正确的/SUBSYSTEM 或 ENTRY 设置也能导致 LNK2001 错误。
20、如何调试一个没有源码的 exe 文件调用的 dll 进在 Visual C 6.0 中, 入 “Project Setting”对话框然后选择 Debug 标签页。
通常 Visual Studio默认“executable for debug session”为可执行文件名,但可以将它改成任何你想要的程序。
甚至可以指定不同的工作目录以及传递参数到你的程序。
这个技术常用来调试 Dlls、名字空间扩展、COM 对象和其他从某些 EXE 以及从第三方的 EXE 中调用的 plug-in 程序。
21、Visual C 6.0 工程中的项目文件都表示什么。
.opt:工程关于开发环境的参数文件,如工具条位置等信息。
.apsAppStudio File:资源辅助文件,二进制格式,一般不用去管它。
.clw:ClassWizard 信息文件,实际上是 INI 文件格式,有兴趣可以研究一下。
有时候ClassWizard 出了问题,手工修改 CLW 文件可以解决。
如果此文件不存在的话,每次用ClassWizard 的时候会提示是否重建。
.dspDevelopStudio Project:项目文件,文本格式,不过不熟悉的不要手工修改。
.dswDevelopStudio Workspace:是工作区文件,其特点和.dsp 差不多。
.plg:是编译信息文件,编译时的 error 和 warning 信息文件实际上是一个 html 文件,一般用处不大。
在单击菜单【Tool】-gt【Option】弹出的对话框里面有个选项可以控制这个文件的生成。
.hpjHelp Project:是生成帮助文件的工程,用 microsoft Help Compiler 可以处理。
.mdpMicrosoft DevStudio Project:是旧版本的项目文件,如果要打开此文件的话,会提示你是否转换成新的.dsp 格式。
.bsc:是用于浏览项目信息的,如果用 Source Brower 的话就必须用这个文件。
如果不用这个功能的话,可以在 Project Options 里面去掉 Generate Browse Info File,这样可以加快编译速度。
.map:是执行文件的影像信息记录文件,除非对系统底层,这个文件一般用不着。
.pchPre-Compiled File:可以加快编译速度,但是文件非常大。
.pdbProgram Database:记录了程序有关的一些数据和调试信息,在调试的时候可能有用。
.exp:只有在编译 DLL 的时候才会生成,记录了 DLL 文件的一些信息,一般也没有用。
.ncb:无编译浏览文件no compile browser。
当自动完成功能出问题时可以删除此文件,编译工程后会自动生成推荐不错的 VC 调试入门概述调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。
不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。
这里我简要的根据自己的经验列出调试中比较常用的技巧,希望对大家有用。
本文约定,在选择菜单时,通过/表示分级菜单,例如 File/Open 表示顶级菜单 File 的子菜单Open。
设置为了调试一个程序,首先必须使程序中包含调试信息。
一般情况下,一个从 AppWizard创建的工程中包含的 Debug Configuration 自动包含调试信息,但是是不是 Debug 版本并不是程序包含调试信息的决定因素,程序设计者可以在任意的Configuration 中增加调试信息,包括 Release 版本。
为了增加调试信息,可以按照下述步骤进行: 打开 Project settings 对话框(可以通过快捷键 ALTF7 打开,也可以通过 IDE 菜单Project/Settings 打开 选择 C/C页,Category 中选择 general ,则出现一个 Debug Info 下拉列表框,可供选择的调试信息 方式包括: 命令行 Project settings 说明无 None 没有调试信息 /Zd LineNumbers Only 目标文件或者可执行文件中只包含全局和导出符号以及代码行 信息,不包含符号调试信息 /Z7 C 7.0- Compatible 目标文件或者可执行文件中包含行号和所有符号调试信息,包括变量名及类型,函数及原型等 /Zi Program Database 创建一个程序库PDB,包括类型信息和符号调试信息。
/ZI Program Database for Edit and Continue 除了前面/Zi 的功能外,这个选项允许对代码进行调试过程中的修改和继续执行。
这个选项同时使pragma 设置的优化功能无效 选择 Link 页,选中复选框quotGenerate Debug Infoquot,这个选项将使连接器把调试信息写进可执行文件和 DLL 如果 C/C页中设置了 Program Database 以上的选项,则 Link incrementally 可以选择。
选中这个选项,将使程序可以在上一次编译的基础上被编译(即增量编译),而不必每次都从头开始编译。
断点是调试器设置的一个代码位置。
当程序运行到断点时,程序中断执行,回到调试器。
断点是最常用的技巧。
调试时,只有设置了断点并使程序回到调试器,才能对程序进行在线调试。
设置断点:可以通过下述方法设置一个断点。
首先把光标移动到需要设置断点的代码行上,然后按 F9 快捷键弹出 Breakpoints 对话框,方法是按快捷键 CTRLB 或 ALTF9,或者通过菜单 Edit/Breakpoints 打开。
打开后点击 Break at 编辑框的右侧的箭头,选择合适的位置信 批注 番茄花园3: ???息。
一般情况下,直接选择 line xxx 就足够了,如果想设置不是当前位置的断点,可以选择Advanced,然后填写函数、行号和可执行文件信息。
去掉断点:把光标移动到给定断点所在的行,再次按 F9 就可以取消断点。
同前面所述,打开 Breakpoints 对话框后,也可以按照界面提示去掉断点。
条件断点:可以为断点设置一个条件,这样的断点称为条件断点。
对于新加的断点,可以单击 Conditions 按钮,为断点设置一个表达式。
当这个表达式发生改变时,程序就被中断。
底下设置包括“观察数组或者结构的元素个数”,似乎可以设置一个指针所指向的内存区的大小,但是我设置一个比较的值但是改动范围之外的内存区似乎也导致断点起效。
最后一个设置可以让程序先执行多少次然后才到达断点。
数据断点:数据断点只能在 Breakpoints 对
上一篇:
VC计算机的IP地址自动设置 源程序 论文 可执行程
下一篇:
【材料工艺】纳米晶镍镀层的制备及其界面扩散与结构