C++
python爱好部落
精通自动化,性能,安全测试。
公众号:python爱好部落
微信: adogandamouse
展开
-
cdecl、stdcall、fastcall、declspec 的用法和区别
首先这三个修饰符是c和c++调用约定 调用约定(Calling convention)决定以下内容:函数参数的压栈顺序,由调用者还是被调用者把参数弹出栈,以及产生函数修饰名的方法。MFC支持以下调用约定: __cdecl,__stdcal和__fastcalll都是函数调用规范,规定了参数出入栈的顺序和方法,如果只用VC编程的话可以不用关心,但是要在C++和Pascal等其原创 2010-01-18 15:19:00 · 801 阅读 · 0 评论 -
C++异常处理 2
}} void main(){ ExceptionClass e("Test"); try{ e.mythrow(); } catch(...) { cout }}这是输出信息:Construct TestConstruct my throwDestruct my throw************原创 2010-01-08 14:27:00 · 520 阅读 · 0 评论 -
C++ 异常处理入门
C++ 异常处理入门异常:程序执行期间,可检测到的不正常情况。例如:0作除数;数组下标越界;打开不存在的文件;远程机器连接超时;malloc失败等等。程序的两种状态:正常状态和异常状态,发生不正常情况后,进入异常状态,从当前函数开始,按调用链的相反次序,查找处理该异常的程序片断。1.throw 表达式语义:用表达式的值生成一个对象(异常对象),程序进入异常状态。Terminate函数,终止程序的执原创 2010-01-08 14:26:00 · 629 阅读 · 0 评论 -
c++异常处理
异常,通常是指程序困难检测到的,运行是不正常的情况,例如被0除,数组越界访问等等。异常处理的语法通常是try{ throw() }catch(){}关键字try以及它后的大括号中的内容我们称其为try块。简单的说,它包含的是可能会出错的地方(就是我们要检测的地方)。当我们检测到一个错误信息的时候,关键字throw就把这个错误抛出来(强呀:)),抛出来怎么办呢?抛哪去呢?我们的catch关键原创 2010-01-08 14:28:00 · 456 阅读 · 0 评论 -
函数调用的几个概念
左通过栈传递,被调用的函数在返回前清理传送参数的内存栈,但不同的是函数名的修饰部分(关于函数名的修饰部分在后面将详细说明)。 _stdcall是Pascal程序的缺省调用方式,通常用于Win32 Api中,函数采用从右到左的压栈方式,自己在退出时清空堆栈。VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上"@"和参数的字节数。 2、C调用约定(即用__cdecl关键字说明)按原创 2010-01-05 18:54:00 · 455 阅读 · 0 评论 -
在名字空间中声明类和成员函数
虽然很多程序员都熟悉名字空间的概念,但他们常常都是被动地使用名字空间。也就是说他们使用的是第三方定义的成员(如标准库的类和函数),而不是在名字空间中声明自己的类和函数。本文拟讨论如何在名字空间中声明自己的类和函数,以及如何在程序中使用它们。 名字空间是一个范畴,它包含类声明,函数声明,常量声明和模板声明等名字空间成员。例如:namespace proj_alpha{//下面是名字空间 p转载 2010-01-05 18:51:00 · 492 阅读 · 0 评论 -
C++中禁止异常信息传递到析构函数外
在有两种情况下会调用析构函数。第一种是在正常情况下删除一个对象,例如对象超出了作用域或被显式地delete。第二种是异常传递的堆栈辗转开解(stack-unwinding)过程中,由异常处理系统删除一个对象。 在上述两种情况下,调用析构函数时异常可能处于激活状态也可能没有处于激活状态。遗憾的是没有办法在析构函数内部区分出这两种情况。因此在写析构函数时你必须保守地假设有异常被激活,因为如果在一原创 2010-01-05 18:43:00 · 446 阅读 · 0 评论 -
C++ Const 用法总结
const主要是为了程序的健壮型,减少程序出错.最基本的用法:const int a=100; b的内容不变,b只能是100也就是声明一个int类型的常量(#define b =100)int const b=100; //和上面作用一样 const指针和引用一般用在函数的参数中int* m = &a; //出错,常量只能用常指针int c= 1;const int*pc = &c;//常指针可指转载 2010-01-05 13:26:00 · 527 阅读 · 0 评论 -
C/C++中函数指针的含义
函数存放在内存的代码区域内,它们同样有地址,我们如何能获得函数的地址呢? 如果我们有一个int test(int a)的函数,那么,它的地址就是函数的名字,这一点如同数组一样,数组的名字就是数组的起始地址。 定义一个指向函数的指针用如下的形式,以上面的test()为例: int (*fp)(int a);//这里就定义了一个指向函数的指针 函数指针不能绝对不能指向不同类型,原创 2010-01-05 18:57:00 · 408 阅读 · 0 评论 -
C++中的全局namespace
我们应该知道传统的C++只有一个全局的namespace,但是由于现在的程序的规模越来越大,程序的分工越来越细,全局作用域变得越来越拥挤,每个人都可能使用相同的名字来实现不同的库,于是程序员在合并程序的时候就会可能出现名字的冲突。namespace引入了复杂性,解决了这个问题。namespace允许像类,对象,函数聚集在一个名字下。本质上讲namespace是对全局作用域的细分。 我想大家都见原创 2010-01-05 18:32:00 · 633 阅读 · 0 评论 -
C++中的异常(exception)
.简介 异常是由语言提供的运行时刻错误处理的一种方式。提到错误处理,即使不提到异常,你大概也已经有了丰富的经验,但是为了可以清楚的看到异常的好处,我们还是不妨来回顾一下常用的以及不常用的错误处理方式。1.1 常用的错误处理方式 返回值。我们常用函数的返回值来标志成功或者失败,甚至是失败的原因。但是这种做法最大的问题是如果调用者不主动检查返回值也是可以被编译器接受的,你也奈何不了转载 2010-01-05 18:24:00 · 682 阅读 · 0 评论 -
C++链接器工具错误:LNK2001, LNK2019
这是归属于链接器工具错误 这一类。无法解析的外部符号“symbol”代码引用了链接器无法在库和对象文件中找到的内容(如函数、变量或标签)。可能的原因 代码请求的内容不存在(例如,符号拼写错误或使用错误的大小写)。 代码请求的内容错误(使用的是混合版本的库,一些库来自产品的一个版本,而其他则来自另一个版本)。 该错误信息之后为致命错误 LNK1120。具体原因转载 2010-01-05 19:43:00 · 716 阅读 · 0 评论 -
C/C++中回调函数初探
对于很多初学者来说,往往觉得回调函数很神秘,很想知道回调函数的工作原理。本文将要解释什么是回调函数、它们有什么好处、为什么要使用它们等等问题,在开始之前,假设你已经熟知了函数指针。 什么是回调函数? 简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。 为什么要使用回调函原创 2010-01-05 18:47:00 · 419 阅读 · 0 评论 -
c++ const用法总结
#include void func(const int* p, int n);const char * getStr();class CA{private:int _nA;public:CA(int a):_nA(a){}inline int getA() const{ //_nA++; //error C2166: l 值指定常数对象 return _nA;}inline原创 2010-01-05 13:48:00 · 1081 阅读 · 0 评论 -
C++ 学习(一)类型转换
1.类型转换按方式分为隐式转换和显式转换。 隐式转换:由编译器自动完成,无需用户干预。 显式转换:采用一定的形式进行转换:类型名(数据) / C中(类型名)数据2.关于转换构造函数 构造函数的一种,主要用于类型转换,格式严格规定为单参数构造函数。 例:Complex类 Complex(double r){Real=r;原创 2010-01-05 13:37:00 · 433 阅读 · 0 评论 -
关于ASSERT(断言)使用的规则--摘自《高质量C/C++编程指南》
摘自《高质量C/C++编程指南》Page 41-42...程序一般分为Debug 版本和Release 版本,Debug 版本用于内部调试,Release 版本发行给用户使用。断言assert 是仅在Debug 版本起作用的宏,它用于检查“不应该”发生的情况。示例6-5 是一个内存复制函数。在运行过程中,如果assert 的参数为假,那么程序就会中止(一般地还会出现提示对话,说明在什么地方引发原创 2010-02-02 21:23:00 · 444 阅读 · 0 评论 -
链表的操作
#ifndef _LIST_H#define _LIST_H#include class CList;typedef void* (CALLBACK *LPENUMFUNC)(void *param, int index, void *data);////////////////////////////////////////////////////////////////////////////原创 2010-01-29 12:21:00 · 506 阅读 · 0 评论 -
0xC0000005: Access Violation
vc编程debug时提示First-chance exception in exShowBmp.exe (HOOKDLL.DLL): 0xC0000005: Access Violation. First-chance exception in exShowBmp.exe: 0xC0000005: Access Violation. 可能的原因: 内存访问错误。应该是访问原创 2010-01-08 13:38:00 · 7355 阅读 · 0 评论