网络收集
HtSoft
这个作者很懒,什么都没留下…
展开
-
数组的定义
下面那些数组的定义是不合法的?为什么?CODE: int get_size(); int buf_size = 1024; (a) int ia[buf_size]; (b) int ia[get_size()]; (c) int ia[4*7-14]; (d) int ia[2*7-14]; (e) char st[11]="fundament转载 2005-11-17 01:22:00 · 1068 阅读 · 0 评论 -
Release 和 Debug版有什么不同
Release 和 Debug版有什么不同Debug版本就是调试版本,Visual C++ 6.0默认的就是Debug版本。在Debug版本中,可以使用单步执行、跟踪等功能,但其生成的可执行文件比较大,代码运行比较慢。Release版本就是发行版本,其运行速度较快,可执行文件较小,但在其编译条件下无法执行调试功能。 还有一点,Release版本的exe文件链接的目标是标准的MFC DL转载 2005-11-17 00:58:00 · 1156 阅读 · 0 评论 -
编译和链接(compile and link)
编译和链接(compile and link)编译: 1 由预处理程序执行C 源文件中的预处理指令 2 C编译器把经过预处理的C代码文件编译成汇编代码文件 3 汇编编译器把汇编代码文件编译成目标代码文件链接: 4 链接程序把所有的目标代码链接起来产生可执行文件 目标代码以机器码的形式存在。转载 2005-11-17 00:57:00 · 7533 阅读 · 0 评论 -
内存对齐
文主要包括二个部分,第一部分重点介绍在VC中,怎么样采用sizeof来求结构的大小,以及容易出现的问题,并给出解决问题的方法,第二部分总结出VC中sizeof的主要用法。 1、 sizeof应用在结构上的情况 请看下面的结构: struct MyStruct { double dda1; char dda; int type }; 对结构MyStruct采用sizeof会出现什么结果呢?sizeo转载 2005-11-17 00:43:00 · 711 阅读 · 0 评论 -
在VC程序中使用调试语句----(三)异常
三、异常1、基本概念 错误是一种条件,在这种条件下,如果不执行额外的处理,线程就不能正常地执行下去。异常是用于处理错误的。使用异常的一个很明显的好处就是它们通过发出错误信号,可以让程序代码和错误处理代码分开,而且不会让程序忽略错误,你不用不断地检查函数的返回值,因此它们将程序代码简单化。另一个好处是它们不需要严格的编程作风。异常的基本特性:.异常是基于每个进程而提出并处理的。.异常不能被线程忽略转载 2005-11-17 01:43:00 · 1492 阅读 · 0 评论 -
内存空间与分配
1、内存分配错误 动态内存分配错误有两种基本类型:内存错误和内存泄漏。(1)内存错误 当一个指针或者该指针所指向的内存单元成为无效单元,或者内存中分配的数据结构被破坏时,就会造成内存错误。指针未被初始化,指针被初始化为一个无效地址,指针被不小心错误地修改,在与指针相关联的内存区域被释放后使用该指针(这种指针被称为虚悬(dangling)指针),这些都会使指针变为无效指针。当通过一个错误指针或者转载 2005-11-17 01:35:00 · 1427 阅读 · 0 评论 -
DLL中调用约定和名称修饰(三)
DLL中调用约定和名称修饰(三)2、C++编译时函数(非类成员函数)名称修饰当函数使用__cdecl调用约定时,编译器进行以下工作:1.以?标识函数名的开始,后跟函数名;2.函数名后面以@@YA标识开始,后跟返回值和参数表;3.当函数的返回值或者参数与C++类无关的时候,返回值和参数表以下列代号表示: B:constD:charE:unsigned charF:shortG:unsig转载 2005-11-17 01:14:00 · 1012 阅读 · 0 评论 -
__cdecl,__fastcall, __stdcall
__cdecl,__fastcall, __stdcall 什么区别?函数参数入栈的方式 --------------------------------------------------------------- 在函数调用过程中,会使用堆栈,这三个表示不同的堆栈调用方式和释放方式。 比如说__cdecl,它是标准的c方法的堆栈调用方式,就是在函数调用时的参数压入堆栈是与函数的声明顺序相反的,转载 2005-11-17 01:02:00 · 923 阅读 · 0 评论 -
句柄和指针
句柄是一些表的索引也就是指向指针的指针,句柄和指针都是地址,句柄是Windows编程的一个关键性的概念,编写Windows应用程序总是要和各种句柄打交道。 所谓句柄,就是一个唯一的数,用以标识许多不同的对象类型,如窗口、菜单、内存、画笔、画刷、电话线路等。在Win32里,句柄是指向一个“无类型对象”(void*)的指针,也就是一个4字节长的数据。无论它的本质是什么,句柄并不是一个真正意义上的转载 2005-11-17 01:00:00 · 1024 阅读 · 0 评论 -
亲密接触VC6.0编译器
大家可能一直在用VC开发软件,但是对于这个编译器却未必很了解。原因是多方面的。大多数情况下,我们只停留在“使用”它,而不会想去“了解”它。因为它只是一个工具,我们宁可把更多的精力放在C++语言和软件设计上。我们习惯于这样一种“模式”:建立一个项目,然后写代码,然后编译,反反复复调试。但是,所谓:“公欲善其事,必先利其器”。如果我们精于VC开发环境,我们是不是能够做得更加游刃有余呢? 闲话少说。我们转载 2005-11-16 23:55:00 · 668 阅读 · 0 评论 -
在VC程序中使用调试语句----(二)跟踪语句
二、跟踪语句1、基本概念 跟踪语句(trace statements)可使程序执行,并使程序员可对可变值进行查看。它们提供了一个用于观察的程序,并且独立于一个交互式的调试器,但是最具有特色的是它们常用于对调试器提供的信息进行补充。在VC中,跟踪消息通常输出到输出窗口中的Debug标签,也可以重新输出到一个文件中。跟踪语句的特性如下:.跟踪语句用于报告代码中重要的运行事件。.跟踪语句的编译通常是有转载 2005-11-17 01:40:00 · 1389 阅读 · 0 评论 -
在VC程序中使用调试语句----(一)断言
为了更好地对程序调试,可以使用如下方法:使用断言、使用跟踪语句、使用异常和返回值。一、断言1、基本概念 断言是一种让错误在运行时候自我暴露的简单有效实用的技术。它们帮助你较早较轻易地发现错误,使得整个调试过程效率更高。 断言是布尔调试语句,用来检测在程序正常运行的时候某一个条件的值是否总为真,它能让错误在运行时刻暴露在程序员面前。使用断言的最大好处在于,能在更解决错误的发源地的地方发现错误。断转载 2005-11-17 01:37:00 · 1796 阅读 · 0 评论 -
DLL中调用约定和名称修饰(二)
DLL中调用约定和名称修饰(二)4、thiscallthiscall调用约定是C++中的非静态类成员函数的默认调用约定。thiscall只能被编译器使用,没有相应的关键字,因此不能被程序员指定。采用thiscall约定时,函数参数按照从右到左的顺序入栈,被调用的函数在返回前清理传送参数的栈,只是另外通过ECX寄存器传送一个额外的参数:this指针。这次的例子中将定义一个类,并在类中定义一个成员函数转载 2005-11-17 01:11:00 · 847 阅读 · 0 评论 -
VC项目文件说明
.opt 工程关于开发环境的参数文件。如工具条位置等信息; .aps (AppStudio File),资源辅助文件,二进制格式,一般不用去管他;.clw ClassWizard信息文件,实际上是INI文件的格式,有兴趣可以研究一下.有时候ClassWizard出问题,手工修改CLW文件可以解决.如果此文件不存在的话,每次用ClassWizard的时候会提示你是否重建;.dsp (Develope转载 2005-11-17 00:40:00 · 1028 阅读 · 0 评论 -
在VC中编译、运行程序的小知识点
1、Run-Time LibraryRun-Time Library是编译器提供的标准库,提供一些基本的库函数和系统调用。我们一般使用的Run-Time Library是C Run-Time Libraries。当然也有Standard C++ libraries。 C Run-Time Libraries实现ANSI C的标准库。VC安装目录的CRT目录有C Run-Time库的大部分源代码。转载 2005-11-17 00:34:00 · 703 阅读 · 0 评论 -
在VC程序中使用调试语句----(四)返回值
四、返回值 并不是在所以场合下都能使用异常,如在使用Windows API编程或带有COM编程时并不使用异常。在异常不适合的时候,使用返回值是一个好的办法。返回值的基本特性:.返回值可以指示正常和不正常的函数运行,但不能阻止线程的继续运行。.返回值很容易被忽略。.返回值在典型情况下是一个整数,通常映射符合于一个预定义的值。.返回值能高效地传递和接收。因此,返回值最适合用于以下的情形:.用于非错误转载 2005-11-17 01:44:00 · 1031 阅读 · 0 评论 -
wParam和lParam
这两个是Win16系统遗留下来的产物,在Win16API中WndProc有两个参数:一个是WORD类型的16位整型变量;另一个是LONG类型的32位整型变量。因此根据匈牙利命名法,16位的变量就被命名为wParam, 而32位的变量就被命名为lParam。到了Win32API中,原来的16位变量也被扩展为32位,因此wParam和lParam的大小完全相同。在Win32API的早期,为了保证和Wi转载 2005-11-17 01:31:00 · 1253 阅读 · 0 评论 -
指针的爱情
1 指向变量的指针变量: 出身: int * point; 遭遇: 两人都另有新欢 心声: 你可以变心,我也可以爱别人,很公平。 2 指向常量的指针变量: 出身: const int * point; 遭遇: 抛弃对方 心声: 说过多少回了,我们之间已经结束了,你别再缠着我了,告诉你,我已经有了新的女朋友了3 指向变量的指针常量: 出身: int * const point;转载 2005-11-17 01:25:00 · 756 阅读 · 0 评论 -
DLL中调用约定和名称修饰(一)
DLL中调用约定和名称修饰(一)调用约定(Calling Convention)是指在程序设计语言中为了实现函数调用而建立的一种协议。这种协议规定了该语言的函数中的参数传送方式、参数是否可变和由谁来处理堆栈等问题。不同的语言定义了不同的调用约定。在C++中,为了允许操作符重载和函数重载,C++编译器往往按照某种规则改写每一个入口点的符号名,以便允许同一个名字(具有不同的参数类型或者是不同的作用域)转载 2005-11-17 01:06:00 · 1164 阅读 · 0 评论