C/C++
文章平均质量分 56
tmac_0817
这个作者很懒,什么都没留下…
展开
-
stdafx.h
stdafx.h 名称的英文全称为:Standard Application Fram Extend 所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。 预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectname.pch。 编译器通过转载 2011-01-12 15:25:00 · 706 阅读 · 0 评论 -
c++类中成员变量的初始化总结
<br /><br />关于这个问题是引起来源于一则面试问题:引用型成员变量如何初始化?<br />回答的不是很确定,于是对这个问题研究一下。<br />1、普通的变量:一般不考虑啥效率的情况下 可以在构造函数中进行赋值。考虑一下效率的可以再构造函数的初始化列表中进行。<br />class CA<br />{<br />public:<br /> int data;<br /> ……<br />public:<br /> CA();<br /> ……<br />};<br />CA::CA():data(转载 2011-03-02 18:30:00 · 342 阅读 · 0 评论 -
C++和Java 的缺省初始化问题
<br /><br />C++中基本类型只有作为全局变量才会进行初始化,而对于类类型只要这个类具有一个无参构造函数则不管这个类的对象是局部变量还是全局变量,它都会进行缺省的初始化,甚至当一个对象通过缺省初始化机制进行创建时,这个对象的类类型数据成员也会根据它们自己的无参构造函数进行缺省的初始化。<br />但是若该类没有无参构造函数,那么若这个类没有任何构造函数,系统将会为这个类提供一个缺省的无参构造函数,理论上这个构造函数会讲这个类的每个数据成员初始化为释放类型的0,但是这因编译器而异,我们最好不要有依赖转载 2011-03-02 19:10:00 · 969 阅读 · 0 评论 -
不用比较运算符实现两个整数的大小比较并输出结果
<br />如果不可以用if,条件运算符<br />1)min=x+(((y-x)>>(31))&(y-x)); <br />max=x-(((x-y)>>(31))&(x-y)); <br />2)char result[33] = {'=','>','>',.....'<'};<br />z = x-y;<br />res = sigma(b(i)|b(32)) [b(i)为0,1为z在第i位的取值];<br />ans = result[res];原创 2011-03-05 20:35:00 · 862 阅读 · 0 评论 -
com/exe文件结构及原理
<br /><br />http://hqiangbo.blog.163.com/blog/static/42933253200831062318739/<br /> <br />大家都害怕病毒,但都想了解病毒。要了解病毒,以及病毒的机理,就必须先了解一些文件的结构和原理,下面把COM/EXE文件的结构介绍一下:<br /> <br />一 .COM文件结构及原理<br /> com文件结构比较简单,它包含程序的一个绝对映像,即为了运行程序准确的处理器指令和内存中的数据,MS-DOS通过直接把该映像转载 2011-03-05 16:17:00 · 950 阅读 · 0 评论 -
windows启动以及exe文件的加载简介
<br /><br />http://blog.163.com/jing0352@126/blog/static/34921313201092572126767/<br /> 先来看这样一个过程(非VISTA启动):CPU复位->传统BIOS->MBR->引导扇区->NTLDR->NTOS->SMSS->1:CSRSS 2:WinLogon->1:LSRSS 2:Services 3:LogonUI->2:Services->Svchost 3:LogonUI->USERINT->1:StartUp Ap转载 2011-03-05 16:18:00 · 728 阅读 · 0 评论 -
c++访问控制
<br />private: 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问. <br />protected: 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问 <br />public: 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问原创 2011-03-07 11:01:00 · 293 阅读 · 0 评论 -
BSS段、数据段、代码段、堆与栈
<br /><br />BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。<br /> <br />数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。<br /> <br />代码段:代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。这部分区域转载 2011-03-05 16:16:00 · 373 阅读 · 0 评论 -
c89与c99标准对比
<br /><br />GCC 支持C99,通过 --std = c99命令行参数开启。 例如:gcc --std = c99 test.c <br /><br />1、增加restrict指针<br /> C99中增加了公适用于指针的restrict类型修饰符,它是初始访问指针所指对象的惟一途径,因此只有借助restrict指针表达式才能访问对象。restrict指针指针主要用做函数变元,或者指向由malloc()函数所分配的内存变量。restrict数据类型不改变程序的语义。<br /> 如果某个函转载 2011-03-09 16:29:00 · 906 阅读 · 1 评论 -
vc++6.0调试
vc++6.0程序调试<br />http://blog.myspace.cn/e/402912262.htm<br /> <br />VC6.0调试C语言程序简析<br />http://hi.baidu.com/vingpopo/blog/item/34338ac5bcf3e8080ff477cb.html<br /> <br />VC++6.0调试入门<br />http://visionsky.blog.51cto.com/733317/153273<br /> VC++程序调试指南<br />ht原创 2011-03-09 22:42:00 · 591 阅读 · 0 评论 -
debug与release
<br />可以project->Set Active Config,选中release版本。此后,按F5或F7编译所得的结果就是release版本。 <br />--------------------------------------------------------<br />--------------------------------------------------------<br />vc6.0在设置选了win32 release,但是点了确定再打开设置,为什么又变成Win32 De转载 2011-03-13 21:10:00 · 381 阅读 · 0 评论 -
VC生成文件介绍
<br /> * DSW:全称是Developer Studio Workspace,最高级别的配置文件,记录了整个工作空间的配置信息,她是一个纯文本的文件,在vc创建新项目的时候自动生成 * DSP:全称是Developer Studio Project,也是一个配置文件,不过她记录的是一个项目的所有配置信息,纯文本文件 * OPT:与DSW、DSP配合使用的配置文件,她记录了与机器硬件有关的信息,同一个项目在不同的机器上的opt文件内容是不同的 * CLW:记录原创 2011-02-24 13:42:00 · 589 阅读 · 0 评论 -
运行库和标准库
<br /><br />运行库(Run-time Library)是程序运行时需要的支撑库。对于 C/C++ 程序来说,其运行库一定是动态链接库或者共享库,而不是静态库。比如,很多程序的运行需要 C 标准库以及其它一些库的支持,那么 C 标准库或者需要的库就是此程序的运行库。如果在程序连接的时候对所有的库进行的是静态连接,那么程序运行的时候就不需要任何运行库的支持。<br /><br />标准库(Standard Library)是按照某一标准的要求而实现的库(C++标准库就是按照 C++ 标准中对标准库的转载 2011-03-03 14:43:00 · 1003 阅读 · 1 评论 -
VC中调用其它程序的三种方法总结
<br />WinExec 两个参数,前一个指定路径,后一个指定显示方式。 UINT WinExec( LPCSTR lpCmdLine, // 命令路径 UINT uCmdShow // 显示方式 ) WinExec("Notepad.exe", SW_SHOW); // 打开记事本WinExec("D://Program Files//Test//Test.exe",SW_SHOWMAXIM转载 2011-03-04 22:32:00 · 485 阅读 · 0 评论 -
#pragma pack,sizeof
VC中提供了#pragma pack(n)来设定变量以n字节对齐方式。默认为8字节对齐,如在stdio.h中有:#ifdef _MSC_VER //microsoft c compiler version/* * Currently, all MS C compilers for Win32 platforms default to 8 byte * alignment. */#pragma pack(push,8)#endif /* _MSC_VER */如下例: #pragma pack(原创 2011-01-18 19:39:00 · 412 阅读 · 0 评论 -
pragma once 条件编译
<br /><br />#if _MSC_VER > 1000<br />#pragma once<br />#endif<br /><br /><br />解释:<br />这是微软的预编译控制。<br />在_MSC_VER较小时,它对一些东西的支持与新版不同<br /><br /><br />_MSC_VER分解如下:<br /><br />MS:Microsoft(微软)的简写<br /><br />C:MSC就是Microsoft出的C编译器。<br /><br />VER:Version(版本)原创 2011-01-17 21:29:00 · 554 阅读 · 0 评论 -
#ifdef __cplusplus extern "C" { #endif //一段代码 #ifdef __cplusplus } #endif
<br /><br />代码:<br />#ifdef __cplusplus <br />extern "C" { <br />#endif<br />//一段代码<br />#ifdef __cplusplus <br />} <br />#endif<br /> 这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,<br />上面的代码的含义是:<br />如果这是一段cpp的代码,那么加入 extern "C"{原创 2011-01-18 19:54:00 · 359 阅读 · 0 评论 -
表达式运算顺序与求值顺序,副作用操作符(++,--),序列点
操作符(运算符)的优先级和结合性并不决定表达式的求值顺序,只是用于进行语法分析,决定语法树的生成。3 + 4 * 5,可以解析成(3 + 4) * 5 或者 3 + (4 * 5),因为乘法优先级高于加法,所以会选择第二种解析方法。3 + 4 + 5,可以解析成(3 + 4) + 5 或者 3 + (4 + 5),因为加法是自左向右结合,所以会选择第一种解析方法。解析成3 + (4 * 5)后,对这个表达式求值,“+”操作符有两个操作数,左操作数为 3,右操作数为 4 * 5,那么是先对左操作数 3 求值呢转载 2011-02-25 15:37:00 · 2042 阅读 · 1 评论 -
c++覆盖,重载,多态
覆盖:在基类中定义了一个非虚拟函数,然后在派生类中又定义了一个同名同参数同返回类型的函数,这就是覆盖了。在派生类对象上直接调用这个函数名,只会调用派生类中的那个。重载:在基类中定义了一个非虚拟函数,然后在派生类中定义一个同名,但是具有不同的参数表的函数,这就是重载。在派生类对象上调用这几个函数时,用不同的参数会调用到不同的函数,有可能会直接调用到基类中的那个。多态:(动态多态)在基类中定义了一个虚拟函数,然后在派生类中又定义一个同名,同参数表的函数,这就是多态。多态是这3种情况中唯一采用转载 2011-02-25 15:58:00 · 467 阅读 · 0 评论 -
C++语言中“_T”是什么意思?
<br />C++ - _T含义 C++语言中“_T”是什么意思?<br />_T("Hello")是一个宏,他的作用是让你的程序支持Unicode编码,因为Windows使用两种字符集ANSI和UNICODE,前者就是通常使用的单字节方式,但这种方式处理象中文这样的双字节字符不方便,容易出现半个汉字的情况。而后者是双字节方式,方便处理双字节字符。<br />Windows NT的所有与字符有关的函数都提供两种方式的版本,而Windows 9x只支持ANSI方式。<br />如果你编译一个程序为ANSI方式转载 2011-02-25 21:34:00 · 1797 阅读 · 0 评论 -
指针与引用
<br />java传递是引用的拷贝,既不是引用本身,更不是对象。<br />c++默认的是值传递。<br />java函数调用传递问题:http://www.javaeye.com/topic/4189<br />指针: 其实指针这个概念在谭浩强的<C程序设计>这本书上是这样说的,指针就是地址,指针值就是地址值。指针变量就是存放指针的变量,所以一定不要将指针与指针变量搞混淆了。指针仅仅是一个地址值,而指针变量就是存放指针(也就是地址的变量)指针的定义:例如整型指针: int *p;p是转载 2011-03-02 16:33:00 · 326 阅读 · 0 评论 -
C++ 引用的作用和用法
<br /><br />C++ 引用的作用和用法<br /> 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。<br />引用的声明方法:类型标识符 &引用名=目标变量名;<br /><br />【例1】:int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名<br /><br />(1)&在此不是求地址运算,而是起标识作用。<br />(2)类型标识符是指目标变量的类型。<br />(3)声明引用时,必须同时对其进行初始化。<br />(4)引用声明转载 2011-03-02 16:54:00 · 650 阅读 · 0 评论 -
vc++运算符
<br />一、赋值运算符 <br />ID:变量名=表达式 <br />1.先计算右端表达式,再把值赋给左端变量 <br />2.x=3*5/(2+8),x=7 <br />3.右端转换为左端定义的变量类型(int x=10/3.0) <br />4.x=y=z=5 <br />5.x+=5(等价x=x+5) <br />6.x+5=y(非法) <br />7.(x+=5)*=2 复合赋值 <br />8.+=,-+,*=,/=,%= <br />二、算数运算符 <br />ID:++/--;+;-;*;转载 2011-03-02 20:10:00 · 5004 阅读 · 0 评论 -
C++类中的4个特殊函数 - 缺省构造函数、拷贝构造函数、拷贝赋值操作符和析构函数
<br />http://sue602.blog.163.com/blog/static/314953072010621326354/原创 2011-03-02 21:36:00 · 504 阅读 · 0 评论 -
define,typedef,const
<br /><br />一. #define与const<br />联系:都可以用来定义常量<br />区别:<br />1. const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应)。<br />2. 前者在堆栈分配了空间,而后者只是把具体数值直接传递到目标变量罢了。或者说,const的常量是一个Run-Time的概念,他在程序中确确实实的存在并可以被调用、传递。而#define常量则是一转载 2011-03-04 19:31:00 · 332 阅读 · 0 评论 -
C/C++ 编译器(CL.EXE)选项
<br />-优化-<br />/O1 最小化空间 /Op[-] 改善浮点数一致性<br />/O2 最大化速度 /Os 优选代码空间<br />/Oa 假设没有别名 /Ot 优选代码速度<br />/Ob<n> 内联展开(默认 n=0) /Ow 假设交叉函数别名<br />/Od 禁用优化(默认值)转载 2011-03-26 01:26:00 · 775 阅读 · 0 评论