c/c++
文章平均质量分 81
zhangboyj
这个作者很懒,什么都没留下…
展开
-
使用静态库时需要注意的事项(gcc下程序调用静态库编译命令:主文件必须在静态库前面!)
在linux下c++开发时, 使用静态库时编译时需要注意如下:编译时静态库一定要放在最后。如:(在-o后面)gcc test.cpp –o test.exe libexample.a使用静态库时一定要连接所有用到的静态库如要使用libwinkeemq-cpp.a,由于libwinkeemq-cpp.a用到了libactivemq-cpp.a,而libactivemq-cpp.a又用到了libpthread.a, libuuid.a等等库,在编译时需要连接所有的库gcc test.cpp –o test.ex原创 2010-09-15 20:19:00 · 6878 阅读 · 2 评论 -
模板类 与 类模板
用相同的类模板可以组建任何类型的对象集合。在传统C++中,可能有一个浮点数类或者一个整数类,如果使用类模板,可以定义一个对两者都适用的类number。类模板说明的一般形式是:template // template class // class A{ //类说明体};template // template ::(形参表)// T A::sum(){ //成员函数定义体 } template ::(形参表){ //原创 2011-02-28 16:16:00 · 1042 阅读 · 0 评论 -
C++中的布局new操作符
<br />通常,new负责在堆内存中找到一个能够满足要求的内存块。new操作符还有一种变体:placement new 操作符,它能让你指定要使用的内存的位置。 程序员可以使用这种特性来设置其内存管理规程或处理需要通过特定地址进行访问的硬件。<br />要使placement new,首先需要包含头文件new,下面的代码段演示了new操作符的用法:<br />#include <new><br />#include <iostream><br />using namespace std;<br />str转载 2011-02-16 09:10:00 · 912 阅读 · 0 评论 -
fstat、stat和lstat 区别
<br />stat系统调用系列包括了fstat、stat和lstat,它们都是用来返回“相关文件状态信息”的,三者的不同之处在于设定源文件的方式不同。<br />1<br />首先隆重介绍的是一个非常重要的”VIP”人物,他是fstat, stat和lstat三者都要用到的一个结构体类型,名字叫做struct stat。可以说,没有这个struct stat的支持,上述三个系统调用将寸步难行。<br /> <br />这个struct stat结构体在不同的UNIX/Linux系统中的定义是有小的区别的,转载 2011-02-15 10:43:00 · 639 阅读 · 0 评论 -
C++:cctype中的字符函数
函数名称返回值isalnum()如果参数是字母数字,即字母或者数字,函数返回trueisalpha()如果参数是字母,函数返回trueisblank()如果参数是水平制表符或空格,函数返回trueiscntrl()如果参数是控制字符,函数返回trueisdigit()如果参数是数字(0-9),函数返回trueisgraph()如果参数是除空格之外的打印字符,函数返回trueislower()如果参数是小写字母,函数返回trueisprint()如果参数是打印字符(包括空格),函数返回trueispunct(原创 2011-02-16 09:18:00 · 1591 阅读 · 0 评论 -
c99之 柔性数组成员
<br />在讲述柔性数组成员之前,首先要介绍一下不完整类型(incomplete type)。不完整类型是这样一种类型,它缺乏足够的信息例如长度去描述一个完整的对象。<br />6.2.5 Types<br />incomplete types (types that describe objects but lack information needed to determine their sizes).<br /> <br />C与C++关于不完整类型的语义是一样的。<br /> <br />前向声原创 2011-03-08 17:19:00 · 3299 阅读 · 3 评论 -
链表,队列,堆栈的区别
<br />链表,队列,堆栈的区别<br />1、栈是个有底的口袋,像袜子。<br />队列是没底的口袋,像通心粉。<br />所以:栈的特点是先进后出,队列的特点是先进先出。<br />2、主要区别是适用的地方不一样, <br /> 链表实际上可以认为是一种数据的物理组织形式,是用指针或对象的引用组织起的一种数据的存储方式. <br /> 队列和堆栈是一个更高层次的概念,其底层可以是用链表也可以是用数组来实现. <br /> 队列和堆栈的主要区别是进出的顺序不一样, <br />转载 2011-02-21 09:39:00 · 14356 阅读 · 0 评论 -
c/c++字节对齐
<br />在 相同的对齐方式下 ,结构体内部数据 定义的顺序不同 ,结构体整体占据内存空间也 不同 ,如下: <br />设结构体如下定义: <br />struct A <br />{ <br /> int a; <br /> char b; <br /> short c; <br />}; <br />结构体A中包含了4字节长度的int一个,1字节长度的char一个和2字节长度的short型数据一个。所以A用到的空间应该是7字节。但是因为编译器要对数据成员在空间原创 2011-02-22 16:10:00 · 916 阅读 · 0 评论 -
do while(0) 用法(转)
<br /> <br />#define MACRO_NAME(para) do{macro content}while(0)<br />的格式,总结了以下几个原因:<br /> <br />1,空的宏定义避免warning:<br />#define foo() do{}while(0)<br /> <br />2,存在一个独立的block,可以用来进行变量定义,进行比较复杂的实现。<br /> <br />3,如果出现在判断语句过后的宏,这样可以保证作为一个整体来是实现:<br />#define fo转载 2011-03-14 18:08:00 · 1666 阅读 · 0 评论 -
函数模板和类模板 模版特化
函数模板和类模板模版特化关键字: template , template 模板 模板(template)是一个将数据类型参化的工具,它提供了一种将代码与数据类相脱离的机制,即代码不受具体的数据类型的影响。模板分为函数模板和类模板两种。 (1)函数模板 函数模板是一种不说明某些参数的数据类型的函数。例如,下面定义了一个可对任何类型变量进行操作(求绝对值)的函数模板:1. template //或写成: template 函数参数的类型T2.原创 2011-03-01 13:48:00 · 11422 阅读 · 1 评论 -
仿函数认识
<br />C++仿函数到底是什么呢?其实它就是一个能像函数一样工作的东西,它的主要作用将会在这篇文章中进行详细的介绍。<br />C++编程语言为我们带来了非常大的好处。不过即使是我们经常使用的功能也有很多比较高深的内容值得我们去深入的探讨。在这里我们将会为大家详细介绍一下C++仿函数的基本概念,方便大家对这一语言的解读。<br />C++仿函数这个词经常会出现在模板库里(比如 STL),那么什么是仿函数呢?<br />顾名思义:仿函数就是能像函数一样工作的东西,请原谅我用东西这样一个代词,下面我会慢慢解原创 2011-02-28 17:23:00 · 868 阅读 · 0 评论 -
C语言中的位操作例子(将任一整数转换为二进制形式)
<br />将任一整数转换为二进制形式<br />*问题分析与算法设计<br />将十进制整数转换为二进制的方法很多,这里介绍的实现方法利用了C语言能够对位进行操作的特点。对于C语言来说,一个整数在计算机内就是以二进制的形式存储的,所以没有必要再将一个整数经过一系列的运算转换为二进制形式,只要将整数在内存中的二进制表示输出即可。<br />#include<stdio.h><br />void printb(int,int);<br />int main()<br />{<br /> int x;pr转载 2011-02-25 14:41:00 · 7162 阅读 · 0 评论 -
C++项目中的extern "C" {}
文章分类:移动开发引言在用C++的项目源码中,经常会不可避免的会看到下面的代码:view sourceprint?1#ifdef __cplusplus2extern "C" {3#endif4 5/*...*/6 7#ifdef __cplusplus8}9#endif它到底有什么用呢,你知道吗?而且这样的问题经常会出现在面试or笔试中。下面我就从以下几个方面来介绍它:1、#ifdef _cplusplus/#endif _cplusplus及发散2、extern "C"2.1、extern关键字原创 2010-09-17 14:14:00 · 600 阅读 · 0 评论 -
C++中的数据类型转换方法总结
C++中的数据类型转换方法总结摘要:本文总结了C/C++中的多种数据类型转换方法,并比较了各自的优劣。给出了推荐的使用建议。从int到char*,或者反过来从char*到int,在C/C++中到底有多少种转换方法呢?符合标准的大概有四种。即C数据转换函数族、sprintf/snprintf/sscanf函数族、字符串流std::stringstream、std::strsteam。不符合标准却又广为使用的包括CString和boost::lexical_cast。本文只讨论符合标准的转换方法,其中std::转载 2011-01-18 09:47:00 · 735 阅读 · 0 评论 -
c++中的堆和栈
<br />1、内存分配方面:<br /> 堆:一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式是类似于链表。可能用到的关键字如下:new、malloc、delete、free等等。<br /> 栈:由编译器(Compiler)自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。<br />2、申请方式方面:<br /> 堆:需要程序员自己申请,并指明大小。在c中malloc函数如p1 = (char转载 2011-01-20 14:24:00 · 699 阅读 · 0 评论 -
C语言的偏方:小技巧而已
<br /> 在C语言的世界里存在一个关于结构体的偏门技巧,例如: <br /> typedef struct _str_type<br />{<br /> int _len;<br /> char _s[1];<br />}str_type; <br /> <br />str_type用于保存字符串(我只是举例,事实上这个结构体没什么用处),乍看上去str_type只能保存长度为<br />1的字符串('/0')。但是,通过写下如下的代码,你将突破这个限制: <br /> int str_l转载 2011-01-21 11:18:00 · 653 阅读 · 0 评论 -
c读写文件实例
<br />#include <stdio.h> <br />#include <stdlib.h><br />#include <fcntl.h><br />#include <sys/stat.h><br />int main(int argc,char *argv[]){<br /> //读取文件路径<br /> char *filepath = argv[1];<br /> //保存文件路原创 2011-01-26 14:50:00 · 1320 阅读 · 0 评论 -
c++ try_catch throw
<br />try{} catch(…){}<br />以前都是用try{} catch(…){}来捕获C++中一些意想不到的异常, 今天看了Winhack的帖子才知道,这种方法在VC中其实是靠不住的。例如下面的代码:try{BYTE* pch ;pch = (BYTE* )00001234 ; //给予一个非法地址*pch = 6 ; //对非法地址赋值,会造成Access Violation 异常}catch(...){AfxMessageBox("catched") ;}<br />这段代码在de转载 2011-01-27 17:24:00 · 5438 阅读 · 0 评论 -
关于静态成员变量在类继承中的一个误区
以前一直认为:静态成员变量是该类共有的,那么其派生类就一定要开辟一段新的内存来该存储派生类从基类中继承的静态成员变量。 正确的说法应该是:基类和其派生类 共享该基类的静态成员变量内存! 可以看下面的代码:#includeclass base{ int mx;public: static int xxx; static void fun(int x) { xxx=x; } base(int x):mx(x){} friend std转载 2011-02-25 14:10:00 · 908 阅读 · 0 评论 -
关于sizeof和strlen的区别
先看几个例子:char *str1="absde"; char str2[]="absde"; char str3[8]={'a',}; char ss[] = "0123456789"; 首先说明一点,char类型占一个字节,所以sizeof(char)是1,这点要理解 str1是一个指针,只是指向了字符串"absde"而已。所以sizeof(str1)不是字符串占的空间也不是字符数组占的空间,而是一个字符型指针占的空间。所以sizeof(str1)=sizeof(char*)=4,在C/C++中一个指转载 2011-02-25 14:33:00 · 655 阅读 · 0 评论 -
C/C++ struct位结构(位域)
从问题开始#includevoid main(){union{struct{unsigned short s1:3;unsigned short s2:3;unsigned short s3:3;}x;char c;}v;v.c=100;printf("%d/n",v.x.s3);}A:4 B:0 C:3 D:6答案是A但我在TURBO C中运行答案是1请问 是因为TURBO C 版本在原因而运行结果不一样吗?我用在TURBO C V2.0版本,能解释一下为甚么是4或1?而v.x.s1和v.x.s2的 值转载 2011-02-23 10:58:00 · 33493 阅读 · 2 评论