C++
njuitjf
不积跬步无以致千里
展开
-
格式化输出:%-+5d
近日看到了一行代码:printf( "%-+5d", x );开始不解其意,后来查了查才知道,这是为了给整型前加+或-号。原创 2009-02-09 15:36:00 · 1490 阅读 · 0 评论 -
[转]C++异常处理 11
在现在,软件变的越来越大,如果不用SEH,要实现完全强壮的应用程序简直是不可能的。我们先来看一个样板程序,即C的运行时函数strcpy:这是一个相当简单的函数,它怎么会引起一个进程结束呢?如果调用者对这些参数中的某一个传递NULL(或任何无效的地址),strcpy就引起一个存取异常,并且导致整个进程结束。使用SEH,就可以建立一个完全强壮的strcpy函数:char* RobustStrcpy(转载 2009-03-27 15:18:00 · 2343 阅读 · 0 评论 -
[转]C++异常处理 13
• ExceptionFlags包含有关异常的标志。当前只有两个值,分别是0(指出一个可以继续的异常)和E X C E P T I O N _ N O N C O N T I N U A B L E(指出一个不可继续的异常)。在一个不可继续的异常之后,若要继续执行,会引发一个E X C E P T I O N _ N O N C O N T I N U A B L E _E X C E P T转载 2009-03-27 15:21:00 · 791 阅读 · 0 评论 -
[转]C++异常处理 14
有可能发生在一个f i n a l l y块、一个异常过滤器、或一个异常处理程序里。当发生这种情况时,系统压栈异常。回忆一下G e t E x c e p t i o n I n f o r m a t i o n函数。这个函数返回EXCEPTION_ POINTERS结构的地址。E X C E P T I O N _ P O I N T E R S的E x c e p t i o n R e转载 2009-03-27 15:21:00 · 835 阅读 · 0 评论 -
malloc()和calloc()
<br />函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别。<br /><br />malloc()函数有一个参数,即要分配的内存空间的大小:<br /><br />void*malloc(size_tsize);<br /><br />calloc()函数有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小。<br /><br />void*calloc(size_tnumElements,size_tsizeOfElement);<b转载 2010-06-19 21:47:00 · 774 阅读 · 0 评论 -
const, volitale and explicit
<br />简单介绍一下这几个关键字,以前也看过多次,基本上是看过了就忘,忘了再看。这次又看了下,把自己的理解说下。<br /> <br />先说说 const,这儿只说const修饰变量的情况。const用于定义一个常量,也就是说定义的这个变量其实是不可变的。但是不可变只是对于当前代码段来说的,并不是说这个变量绝对的不可变。例如,系统中断如果要修改这个变量的值的话,const就无法阻止了。<br /> <br />volitale 是用来告诉编译器,某个变量,不仅在当前代码段中可能被修改,也可能被其他程序原创 2010-08-13 12:32:00 · 2082 阅读 · 0 评论 -
fwrite 0D 0A 问题
<br />今天一同事在用fwrite向文件中写数据时,当写入0x0A时,其前面总会被加上一个0x0D。后来在网上查了,发现也有人遇到类似问题。出现这个问题的原因是fwrite 在以文本方式写文件时,碰到0x0A,会自动在前面加上0x0D,以够成回车换行符。解决办法是以二进制方式打开文件,然后进行写文件。<br /> <br />出问题的代码:<br />fopen( filename, "w+" );<br /> <br />解决问题的代码:<br />fopen( filename, "wb+" );原创 2010-08-18 17:11:00 · 3968 阅读 · 2 评论 -
C++ union 使用总结
<br />以前写代码,很少使用union,所以在潜意识中,经常将其忽略。最近要写个生成一段数据的程序,数据类型有两种,一种保护的数据多些,另一种只包含第一种中的部分数据。因为潜意识中没有union,所以开始也没想到用union来实现。给同事讨论时,同事提示用union时,自己才想起来,C++中还有union。<br />依次为契机,就在网上查了些介绍union的资料,给自己补补课。下面总结了一下使用union的几个注意点,深层次的东西就不去探讨了。<br /> <br />1、共享内存<br />也就是共原创 2010-08-25 13:54:00 · 3719 阅读 · 0 评论 -
堆和栈的区别 (转贴)
<br />堆和栈的区别<br />一、预备知识—程序的内存分配<br />一个由c/C++编译的程序占用的内存分为以下几个部分<br />1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。<br />2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。<br />3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的转载 2011-04-10 16:37:00 · 738 阅读 · 0 评论 -
深入C++的new
<br /><br />转自:<br />http://www.builder.com.cn/2008/0104/696370.shtml<br /> <br />“new”是C++的一个关键字,同时也是操作符。关于new的话题非常多,因为它确实比较复杂,也非常神秘,下面我将把我了解到的与new有关的内容做一个总结。new的过程当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。当然,如果我们创建的是简单类型的变量,那么第二步会被省略。假如我们转载 2011-04-10 17:13:00 · 738 阅读 · 0 评论 -
undefined reference问题总结
转自:http://ticktick.blog.51cto.com/823160/431329最近在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误:(.text+0x13): undefined reference to `func' 关于undefined reference这样的问题,大家其实经常会遇到,在此,转载 2012-08-20 22:31:22 · 914 阅读 · 0 评论 -
printf()格式化输出详解
转自:http://hi.baidu.com/ejxzntbomebbcxq/item/21c521d1cc77dd3ae3108f83转载 2014-05-09 11:33:19 · 1229 阅读 · 0 评论 -
[转]C++异常处理 10
finally块的总结性说明我们已经明确区分了强制执行f i n a l l y块的两种情况:• 从t r y块进入f i n a l l y块的正常控制流。• 局部展开:从t r y块的过早退出(g o t o、l o n g j u m p、c o n t i n u e、b r e a k、r e t u r n等)强制控制转移到f i n a l l y块。第三种情况,全局展开( g转载 2009-03-27 15:17:00 · 952 阅读 · 0 评论 -
[转]C++异常处理 9
*lpAddress = A; // VirtualFree((LPVOID)lpAddress, 1024, MEM_RELEASE); return dwReturnValue;}DWORD Func_SEHTerminate(){ DWORD dwReturnData = 0; HANDLE hSem = NULL; const char* lpS转载 2009-03-27 15:17:00 · 749 阅读 · 0 评论 -
C++中不常用的关键字
C++中不常用的关键字 mutable关键字 关键字mutable是C++中一个不常用的关键字,他只能用于类的非静态和非常量数据成员我们知道一个对象的状态由该对象的非静态数据成员决定,所以随着数据成员的改变,对像的状态也会随之发生变化!如果一个类的成员函数被声明为const类型,表示该函数不会改变对象的状态,也就是该函数不会修改类的非静态数据成员.但是有些时候需要在该类函数转载 2008-12-08 22:05:00 · 515 阅读 · 0 评论 -
标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast(转载)
C 风格(C-style)强制转型如下: (T) exdivssion // cast exdivssion to be of type T 函数风格(Function-style)强制转型使用这样的语法: T(exdivssion) // cast exdivssion to be of type T 这两种形式之间没有本质上的不同,它纯粹就是一个把括号放在哪的问题。我把这转载 2009-03-16 15:35:00 · 489 阅读 · 0 评论 -
[转]C++异常处理 1
这两天要处理一个异常的问题,刚好查了些相关的资料。在网上看到了一个不错的贴子,就转了过来,方便本人,以及来此旅游的朋友学习。源地址:http://www.host01.com/Print.html?91983,1 异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制。也许我们已经使用过异常,但是你会是一种习惯吗,不要老是想着当我打开一个文件的时候才用异常判断一下,我转载 2009-03-27 15:04:00 · 961 阅读 · 0 评论 -
[转]C++异常处理 3
bad_typeid 报告在表达式typeid(*p)中有一个空指针P④ 由runtime_error派生的异常range_error 报告违反了后置条件overflow_error 报告一个算术溢出bad_alloc 报告一个存储分配错误使用析构函数防止资源泄漏这部分是一个经典和很平常就会遇到的实际情况,下面的内容大部分都是从M转载 2009-03-27 15:10:00 · 634 阅读 · 0 评论 -
[转]C++异常处理 4
}很多window系统有C-like接口,使用象like createWindow 和 destroyWindow函数来获取和释放window资源。如果在w对应的window中显示信息时,一个异常被抛出,w所对应的window将被丢失,就象其它动态分配的资源一样。解决方法与前面所述的一样,建立一个类,让它的构造函数与析构函数来获取和释放资源:file://一个类,获取和释放一个w转载 2009-03-27 15:11:00 · 753 阅读 · 0 评论 -
[转]C++异常处理 5
当异常对象被拷贝时,拷贝操作是由对象的拷贝构造函数完成的。该拷贝构造函数是对象的静态类型(static type)所对应类的拷贝构造函数,而不是对象的动态类型(dynamic type)对应类的拷贝构造函数。比如以下这经过少许修改的passAndThrowWidget:class Widget { ... };class SpecialWidget: public Widget { ..原创 2009-03-27 15:12:00 · 626 阅读 · 0 评论 -
[转]C++异常处理 7
file://异常}catch (logic_error& ex) { // 处理所有其它的 ... // logic_errors异常}综上所述,把一个对象传递给函数或一个对象调用虚拟函数与把一个对象做为异常抛出,这之间有三个主要区别。第一、异常对象在传递时总被进行拷贝;当通过转载 2009-03-27 15:15:00 · 724 阅读 · 0 评论 -
[转]C++异常处理 12
下面的代码举例说明了一种方法,指出所发生异常的类别:BOOL Func_SEHExceptionGetCodeBase(){ int x,y; __try{ x = 0; y = 4/x; } __except((GetExceptionCode() == EXCEPTION_INT_DIVIDE_BY_ZERO) ? / EXC转载 2009-03-27 15:19:00 · 1038 阅读 · 0 评论 -
[转]C++异常处理 2
}} void main(){ ExceptionClass e("Test"); try{ e.mythrow(); } catch(...) { cout }}这是输出信息:Construct TestConstruct my throwDestruct my throw********转载 2009-03-27 15:08:00 · 647 阅读 · 0 评论 -
[转]C++异常处理 8
微软在Wi n d o w s中引入S E H的主要动机是为了便于操作系统本身的开发。操作系统的开发人员使用S E H,使得系统更加强壮。我们也可以使用S E H,使我们的自己的程序更加强壮。使用S E H所造成的负担主要由编译程序来承担,而不是由操作系统承担。当异常块(exception block)出现时,编译程序要生成特殊的代码。编译程序必须产生一些表( t a b l e)来支持原创 2009-03-27 15:16:00 · 757 阅读 · 0 评论 -
#pragma comment使用
转自:http://www.cnitblog.com/ictfly/archive/2011/06/27/74454.html 编程经常碰到,理解的总不是很透彻,在这里查阅资料总结一下! 在编写程序的时候,我们常用到#pragma指令来设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma once :这是一个比较常用的指令,只要在头文件的最开始加入这条指令就能转载 2015-01-28 19:34:31 · 9658 阅读 · 0 评论