C/C++基础
文章平均质量分 86
liufei_learning
这个作者很懒,什么都没留下…
展开
-
经典的排错过程 expected unqualified-id before string constant
答案是:我的代码少了一个 “;”=====================================现场:回到 报错的那一行,发现没有问题。 报错的文件:ptlogin2_api.h(22行):expected unqualified-id before string constant 在我的一个cpp的 代码中间(绝对不是在头文件),使用了这个文件 ptlo转载 2014-10-23 21:41:31 · 4184 阅读 · 0 评论 -
C/C++ 可变参数(3)
1 函数声明首先,要实现类似printf()的变参函数,函数的最后一个参数要用 ... 表示,如 int log(char * arg1, ...)这样编译器才能知道这个函数是变参函数。这个参数与变参函数的内部实现完全没有关系,只是让编译器在编译调用此类函数的语句时不计较参转载 2011-07-09 09:53:30 · 1202 阅读 · 0 评论 -
C/C++ 可变参数(2)
深入浅出可变参数函数的使用技巧本文主要介绍可变参数的函数使用,然后分析它的原理,程序员自己如何对它们实现和封装,最后是可能会出现的问题和避免措施。VA函数(variable argument function),参数个数可变函数,又称可变参数函数。C/C++编程中,系统提供给编程转载 2011-07-09 09:45:45 · 1699 阅读 · 0 评论 -
C/C++ 可变参数(1) - printf()
一直以来都觉得printf似乎是c语言库中功能最强大的函数之一,不仅因为它能格式化输出,更在于它的参数个数没有限制,要几个就给几个,来者不拒。printf这种对参数个数和参数类型的强大适应性,让人产生了对它进行探索的浓厚兴趣。关键字:printf, 可变参数1. 使用情形int转载 2011-07-09 09:45:06 · 1621 阅读 · 1 评论 -
Windows中的时间(SYSTEMTIME和FILETIME)
<br />上一篇中介绍了C运行库中的时间处理函数。这一篇介绍Windows SDk中提供的时间函数。两种时间系统之间没有本质区别(事实上CRT时间是用Windows时间实现的,当然这是说的VC实现),同样提供本地时间和UTC时间之间的转换。不过CRT中的tm时间在SDK中对应为系统时间(SYSTEMTIME),CRT中的time_t时间在SDK中对应的为文件时间(FILETIME),那个"特殊时刻"也变成1601年1月1日的子夜。<br />当然,首先要弄清楚FILETIME与SYSTEMTIME定义。<转载 2011-05-08 00:04:00 · 1619 阅读 · 0 评论 -
CRT中的时间(time_t和tm)
<br /> 时间处理时实际项目中经常碰到的问题,这里介绍最常用的时间处理函数。<br />首先介绍基本的时间概念。时间一般分为两种,一种是本地时间(Local Time),一种是协调世界时间(Coordinated Universal Time ,UTC),也就是传说中的格林威治时间。本地时间与UTC时间之间的差即为时差,比如,北京时间(东八区)比UTC时间晚8个小时。<br />C运行库中处理时间的函数主要是这四个:<br /> view plaincopy to clipboardprint?time转载 2011-05-07 23:42:00 · 1684 阅读 · 0 评论 -
C语言内存分配
<br /> <br />C语言程序编译的内存分配:<br />1.栈区(stack) --编译器自动分配释放,主要存放函数的参数值,局部变量值等;<br />2.堆区(heap) --由程序员分配释放;<br />3.全局区或静态区 --存放全局变量和静态变量;程序结束时由系统释放,分为全局初始化区和全局未初始化区;<br />4.字符常量区 --常量字符串放与此,程序结束时由系统释放;<br />5.程序代码区--存放函数体的二进制代码<br />例: //main.c<br />int a=0; //原创 2011-05-02 14:02:00 · 1674 阅读 · 1 评论 -
堆和栈的区别(转过无数次的文章)
<br /> <br />一、预备知识—程序的内存分配<br />一个由C/C++编译的程序占用的内存分为以下几个部分<br />1、栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其<br />操作方式类似于数据结构中的栈。<br />2、堆区(heap) — 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回<br />收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。<br />3、全局区(静态区)(static)—,全局变量和静态变量的存储是放转载 2011-05-02 15:25:00 · 1634 阅读 · 0 评论 -
C/C++ 位操作符使用
<br /> <br />本章小结:<br />1.掩码<br />就是一串2进制对目标字段进行位与运算,屏蔽当前的输入位。<br />将源码与掩码经过逻辑运算得出新的操作数。其中要用到逻辑运算如OR运算。AND运算。用于如将ASCLL码中大写字母改作小写字母。<br />2.与或异或转换成补码运算<br />3. 用法:掩码(&)<br />4. 用法:打开位(|)<br />5.用法:关闭位(&~)<br />6. 用法:转置位(^)<br />7. 将Value的第bit_number位置1原创 2011-03-24 12:19:00 · 5629 阅读 · 0 评论 -
C/C++移位运算符出界后的结果是不可预期的
<br /><br />关于逻辑移位、算术移位可参见迅雷深大笔试题部分。的一道题。<br />以前看到C++标准上说,移位运算符(<<、>>)出界时的行为并不确定:<br />The behavior is undefined if the right operand is negative, orgreater than or equal to the length in bits of the promoted left operand.<br />我当时也没有深究过这个问题。前几天有个网友来信转载 2011-03-21 22:41:00 · 1718 阅读 · 0 评论 -
C++标准库头文件介绍
<br /><br />出处:http://blog.csdn.net/mikewolf2007/archive/2009/05/25/4213387.aspx<br />C++标准库的所有头文件都没有扩展名。C++标准库的内容总共在50个标准头文件中定义,其中18个提供了C库的功能。<cname>形式的标准头文件【<complex>例外】其内容与ISO标准C包含的name.h头文件相同,但容纳了C++扩展的功能。在<cname>形式标准的头文件中,与宏相关的名称在全局作用域中定义,其他名称在s转载 2011-03-21 00:15:00 · 1585 阅读 · 0 评论 -
List of C functions
<br /><br />From Wikipedia, the free encyclopedia<br /><br />This article may need to be wikified to meet Wikipedia's quality standards. Please help by addingrelevant internal links, or by improving the article's layout. (May 2009)<br />The p转载 2011-03-21 00:17:00 · 1659 阅读 · 0 评论 -
C standard library headers
<br /><br />From Wikipedia, the free encyclopedia<br />Subcategories<br />This category has the following 2 subcategories, out of 2 total.<br />*[×] Stdio.h (12 P)[×] Stdlib.h (13 P)<br />Pages in category "C standard library headers"<br转载 2011-03-21 00:15:00 · 1582 阅读 · 0 评论 -
#ifdef __cplusplus
看一些程序的时候老是有“#ifdef __cplusplus”的定义,搞搞清楚是怎么回事: #ifdef __cplusplus是什么意思? Microsoft-Specific Predefined Macros__cplusplus Defined for C++ prog转载 2011-07-16 09:55:24 · 1162 阅读 · 0 评论 -
解析“extern”
解析“extern”1、 声明外部变量 现代编译器一般采用按文件编译的方式,因此在编译时,各个文件中定义的全局变量是互相透明的,也就是说,在编译时,全局变量的可见域限制在文件内部。下面举一个简单的例子。创建一个工程,里面含有A.cpp和B.cpp两个简单的C++源文件://A.c转载 2011-07-16 10:00:00 · 1130 阅读 · 0 评论 -
Boost智能指针-基础篇
简介内存管理一直是 C++ 一个比较繁琐的问题,而智能指针却可以很好的解决这个问题,在初始化时就已经预定了删除,排解了后顾之忧。1998年修订的第一版C++标准只提供了一种智能指针:std::auto_ptr(现以废弃),它基本上就像是个普通的指针:通过地址来访问一个动态分配的对象。std::auto_ptr之所以被看作是智能指针,是因为它会在析构的时候调用delete操作符来自动释放所包原创 2014-06-26 10:22:31 · 6098 阅读 · 0 评论 -
C++笔记:面向对象编程(Handle类)
句柄类句柄类的出现是为了解决用户使用指针时需要控制指针的加载和释放的问题。用指针访问对象很容易出现悬垂指针或者内存泄漏的问题。为了解决这些问题,有许多方法可以使用,句柄类就是其中之一。句柄类是一种包装类,用于存储和管理基类的对象指针,减轻用户使用对象的负担。句柄类使用指针执行操作,虚成员由于既可以指向基类型又可以指向派生类型,所以其行为将在运行时根据句柄实际绑定的对象而变化。原创 2014-05-05 08:28:24 · 13491 阅读 · 0 评论 -
C++笔记:面向对象编程(Visual)
一步一了解,C++ Visual 关键字百科原创 2014-04-01 06:05:00 · 2917 阅读 · 0 评论 -
C++笔记:派生类到基类转换到可访问性
要确定到基类的转换是否可访问,可以考虑基类的public成员是否可访问,如果可以,转换是可以访问的,否则,转换是不可访问的。原创 2014-03-20 06:43:18 · 10250 阅读 · 3 评论 -
C++笔记:面向对象编程基础
面向对象编程基础面向对象编程基于三个基本概念:数据抽象-继承-动态绑定原创 2014-03-18 06:20:36 · 7094 阅读 · 1 评论 -
C++笔记: 面向对象编程进阶
[前篇]C++笔记:面向对象编程基础转换与继承派生类到基类到自动转换派生类指针 ----> 基类指针 --/-> 派生类指针派生类对象 --/-> 基类对象 --/-> 派生类对象派生类对象的引用或指针可以自动转换为基类子对象的引用或指针。(因为派生类对象也是基类对象)没有从基类引用或指针到派生类引用或指针的自动转换。(一个基类对象可能是也可能不是一个派生类对象的部原创 2014-03-28 06:49:24 · 6294 阅读 · 1 评论 -
C++笔记:复制控制
一步一了解C++复制控制,复制构造函数,析构函数百科原创 2014-03-16 08:32:58 · 3701 阅读 · 1 评论 -
C++笔记:构造函数
构造函数构造函数是特殊的成员函数,只要创建类类型的新对象,都要执行构造函数。一个类声明的构造函数的数量没有限制,只要每个构造函数的形参表是唯一的,实参决定使用哪个构造函数构造函数不能声明为 const与任意的成员函数一样,构造函数可以定义在类的内部或外部使用默认实参可以减少代码的重复构造函数的执行初始化阶段: 隐式或显式初始化阶段初始化阶段是显式或者原创 2014-03-10 15:32:47 · 1810 阅读 · 1 评论 -
C++笔记:Const
一步一了解,C++ Const 百科原创 2014-03-14 08:23:30 · 2294 阅读 · 2 评论 -
C++笔记:class
类声明可以声明一个类而不定义它:class Screen; 这个声明,有时称为前向声明(forward declaraton),在程序中引入了类类型的Screen。在声明之后、定义之前,类 Screen 是一个不完全类型(incompete type),即已知 Screen 是一个类型,但不知道包含哪些成员。不完全类型(incomplete type)只能以有限方式使用。不原创 2014-02-25 14:52:09 · 1850 阅读 · 0 评论 -
深入理解C++浮点数(float、double)类型数据比较、相等判断
浮点数在内存中的存储机制和整型数不同,其有舍入误差,在计算机中用近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学记数法。所以浮点数在运算过程中通常伴随着因为无法精确表示而进行的近似或舍入。但是这种设计的好处是可以在固定的长度上存储更大范围的数。1、将字符串转换为float、double过程存在转载 2013-11-19 11:03:02 · 1676 阅读 · 0 评论 -
C语言中的整数自动转换原则
1、隐式转换 C在以下四种情况下会进行隐式转换: 1、算术运算式中,低类型能够转换为高类型。 2、赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给他。 3、函数调用中参数传递时,系统隐式地将实参转换为形参转载 2011-09-14 13:13:16 · 1649 阅读 · 0 评论 -
C语言 volatile用法
<br /> <br />嵌入式编程中经常用到 volatile这个关键字,在网上查了下他的用法可以归结为以下两点:<br />一:告诉compiler不能做任何优化<br /> 比如要往某一地址送两指令: <br /> int *ip =...; //设备地址 <br /> *ip = 1; //第一个指令 <br /> *ip = 2; //第二个指令 <br /> 以上程序compiler可能做优化而成: <br /> int *ip =转载 2011-03-16 13:47:00 · 2053 阅读 · 0 评论 -
#define A (* (volatile unsigned long *) 详解
<br /> #define A (* (volatile unsigned long *) 0x48000000 )<br /> 对于不同的计算机体系结构,设备可能是端口映射,也可能是内存映射的。如果系统结构支持独立的IO地址空间,并且是端口映射,就必须使用汇编语言完成实际对设备的控制,因为C语言并没有提供真正的“端口”的概念。如果是内存映射,那就方便的多了。<br /> <br /> 举个例子,比如像寄存器A(地址假定为0x48000000)写入数据0x01,那么就可以这样设置转载 2011-03-16 13:25:00 · 2387 阅读 · 0 评论 -
c/c++标准预定义宏
<br />[转载]c/c++标准预定义宏2009-08-22 14:40<br />http://www.cnblogs.com/sevencat/archive/2004/06/10/14872.html<br />一、标准预定义宏<br />The standard predefined macros are specified by the relevant language standards, so they are available with all compilers that imple转载 2011-03-15 10:51:00 · 2426 阅读 · 0 评论 -
INI文件读写(一)
ini文件(即Initialization file),这种类型的文件中通常存放的是一个程序的初始化信息。ini文件由若干个节(Section)组成,每个Section由若干键(Key)组成,每个Key可以赋相应的值。读写ini文件实际上就是读写某个的Section中相应的Key的值,而这只要借助几个函数即可完成。一、向ini文件中写入信息的函数1. 把信息写入系统的win.ini文件BOOL W转载 2010-03-26 20:45:00 · 1913 阅读 · 0 评论 -
INI文件读写(二)
配置文件中经常用到ini文件,在VC中其函数分别为:写入.ini文件:BOOL WritePrivateProfileString( LPCTSTR lpAppName, // INI文件中的一个字段名[节名]可以有很多个节名 LPCTSTR lpKeyName, // lpAppName 下的一个键名,也就是里面具体的变量名 LPCTSTR lpString,转载 2010-03-26 20:47:00 · 1409 阅读 · 0 评论 -
string转double
Abstractstd::string为library type,而int、double为built-in type,两者无法利用(int)或(double)的方式互转,本文提出轉換的方式。Introduction使用環境:Visual C++ 9.0 / Visual Studio 2008Method 1:使用C的atoi()與atof()。先利用c_str(转载 2010-03-24 11:15:00 · 4437 阅读 · 0 评论 -
C++命名空间
一、 为什么需要命名空间(问题提出) 命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中 常见的同名冲突。 在 C语言中定义了3个层次的作用域,即文件(编译单元)、函数和复合语句。C++又引入了类作用域,类是出现在文件内的。在不同的作用域中可以定义相同名字的变量,互不于扰,系统能够区别它们。 1、全局变量的作用域是整个程序,在同一作用域中不转载 2010-03-18 08:50:00 · 16661 阅读 · 10 评论 -
stdafx.h头文件的作用
Standard Application Fram Extend没有函数库,只是定义了一些环境参数,使得编译出来的程序能在32位的操作系统环境下运行。 Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程序也要花费相当长的时间来完成工作。由于每个.CPP文件都包含相同的include文件,为每个.CPP文件都重复处理这些文件就显得很傻了。为避免转载 2010-03-18 14:29:00 · 2280 阅读 · 0 评论 -
#pragma once与 #ifndef的区别
为了避免同一个文件被include多次 1 #ifndef 方式2 #pragma once方式 在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。 方式一: #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ ... ... // 一些声明语句原创 2010-03-17 10:35:00 · 1368 阅读 · 0 评论 -
C++的iostream标准库介绍
C++的iostream标准库介绍 C++的iostream标准库介绍 0 为什么需要iostream 1 iostream: istream 和 ostream 2 fstream: ifstream 和 ofstream 3 strstream: ostrstream 和 istrstream 4 stringstream 5 io_state 输入/输出转载 2010-03-14 00:34:00 · 1794 阅读 · 1 评论 -
C/C++常用函数
Strstr strncpy strcpy_s //VC6.0没有此函数 strcpy CString 转换 string CString 转换 char数组 String 转换原创 2010-03-14 00:22:00 · 2147 阅读 · 0 评论 -
C++中的内存对齐
C++中的内存对齐 内存对齐 在我们的程序中,数据结构还有变量等等都需要占有内存,在很多系统中,它都要求内存分配的时候要对齐,这样做的好处就是可以提高访问内存的速度。 我们还是先来看一段简单的程序: 程序一 1 #include 2 using namespac转载 2010-03-04 00:32:00 · 1482 阅读 · 0 评论 -
C++中CONST
C++中CONSTC中常用:“ #define 变量名 变量值”定义一个值替代,然而却有个致命缺点:缺乏类型检测机制,这样预处理在C++中成为可能引发错误的隐患,于是引入const.const使用:1. 用于指针的两种情况:const是一个左结合的类型修饰符.int const *A; //A可变,*A不可变int *const A; //A不可变,*A可变2.限定函转载 2010-03-04 00:29:00 · 1413 阅读 · 0 评论