c/c++
文章平均质量分 80
cws1214
这个作者很懒,什么都没留下…
展开
-
switch 语句中省略号与 case 范围
这个是gcc对c语言中switch case的扩展,所以只能用gcc编译通过.2.7 switch 语句中的 case 范围在标准 C 中,switch 语句中的 case 标签只能有一个关联值。Sun C 允许使用某些编译器中使用的扩展(称为 case 范围)。case 范围指定要与单个 case 标签关联的值范围。case 范围语法为:case low ..转载 2012-10-30 15:05:10 · 17019 阅读 · 2 评论 -
rand()函数
#include 头文件包含两个随机函数:函数一:int rand(void); 从srand (seed)中指定的seed开始,返回一个[0, RAND_MAX(0x7fff)]间的随机整数。函数二:void srand(unsigned seed); 参数seed是rand()的种子,用来初始化rand()的起始值。即一般是先调用srand(seed)设置种子转载 2013-05-09 10:44:07 · 820 阅读 · 0 评论 -
sizeof()与对象的内存布局
对于对象的内存布局与内存对齐这个问题,其实是没有统一的说法的,因为实际情况还要联系你的平台与编译器以及编译器的设置。我的是VC7,XP系统,编译器的结构成员对齐设置为默认。下面针对两种情况来说说: 在没有虚拟函数的情况下。对象的内存布局比较简单。看下面的类: class A{ public:int m_a;转载 2013-05-10 18:11:06 · 587 阅读 · 0 评论 -
bitmap处理海量数据
【什么是Bit-map】 所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。 如果说了这么多还没明白什么是Bit-map,那么我们来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排序(这里假设这些元素没有重复)。那么我们就可以采用Bit-map的方法来达到排转载 2013-08-08 20:01:06 · 1101 阅读 · 0 评论 -
串行化初探
ps:过程类似于字节流的解析过程,只是这些存储在任何地方?串行化(serialization)是指将一个对象的当前状态转换成字节流(a stream of bytes)的过程,而反串行化(deserialization)则指串行化过程的逆过程,将字节流转换成一个对象,打回原形。一、串行化的意义: 1:解决Web应用程序的无状态弊端 一旦将某一对象串行化,得到的字节可以存储在文件转载 2013-08-13 23:33:11 · 775 阅读 · 0 评论 -
使用可重入函数进行更安全的信号处理
在早期的编程中,不可重入性对程序员并不构成威胁;函数不会有并发访问,也没有中断。在很多较老的 C 语言实现中,函数被认为是在单线程进程的环境中运行。不过,现在,并发编程已普遍使用,您需要意识到这个缺陷。本文描述了在并行和并发程序设计中函数的不可重入性导致的一些潜在问题。信号的生成和处理尤其增加了额外的复杂性。由于信号在本质上是异步的,所以难以找出当信号处理函数 触发某个不可重入函数时导致的转载 2013-09-23 11:43:58 · 724 阅读 · 0 评论 -
linux平台检测c/c++内存泄露方法
由于 C 和 C++ 程序中完全由程序员自主申请和释放内存,稍不注意,就会在系统中导入内存错误。同时,内存错误往往非常严重,一般会带来诸如系统崩溃,内存耗尽这样严重的后果。从历史上看,来自计算机应急响应小组和供应商的许多最严重的安全公告都是由简单的内存错误造成的。自从 70 年代末期以来,C/C++ 程序员就一直讨论此类错误,但其影响在 2007 年仍然很大。与许多其他类型的常见错误不同,内存错误转载 2013-09-23 14:42:39 · 6055 阅读 · 0 评论 -
Boost 库中的实用工具类使用入门
实用工具类(utility classes)在几乎任何适当规模的 C++ 项目中都是必需的,但是不存在满足此需求的标准方法。通常,团队根据他们的需求编写实用工具类代码,但是由于缺少重要的接口信息,使得相同组织中的其他项目团队无法重用那些类。建议的标准模板库(Standard Template Library,STL)只具有诸如 hash、stack 和 vector 等少数基本类,因此无法有效地用转载 2013-09-23 15:05:50 · 1031 阅读 · 0 评论 -
volatile变量
在程序设计中,尤其是在C语言、C++、C#和Java语言中,使用volatile关键字声明的变量或对象通常拥有和优化和(或)多线程相关的特殊属性。通常,volatile关键字用来阻止(伪)编译器对那些它认为变量的值不能“被代码本身”改变的代码上执行任何优化。 在C环境中,volatile关键字的真实定义和适用范围经常被误解,加之C++、C#和Java都从C中神秘地“继承”了volatile,在转载 2013-09-23 10:18:13 · 740 阅读 · 0 评论 -
如何防止代码腐烂
很多团队都有这个问题,一个项目的代码本来开始设计得好好的,一段时间以后,代码就会变得难以理解,难以维护,难以修改。为什么?我一直在思考这个问题。 让我们先看一个人的情况。1.程序员的成长新手的代码 新手的代码没有经验,基本不考虑代码设计,代码规模稍稍大一点则自己就乱了。进阶者的代码 小规模的时候转载 2013-10-08 17:52:41 · 740 阅读 · 0 评论 -
嵌入式sql c文件编译
A.预编译部分 1.预编译DB2篇1.1 什么是DB2预编译 在我们用C语言编写访问DB2的程序过程中,需要用到嵌入式SQL,其作用是将DB2 SQL混入一般C程序中, DB2预编译器可以将SQL语法直接转换为DB2行时服务应用程序编程接口(API)调用。1.2 什么是bind 这是DB2 prep要做的事情,即把SQC中的SQL语句变为DB2数据库可认的AP转载 2013-10-24 12:52:22 · 4246 阅读 · 0 评论 -
函数参数的入栈顺序与可变参数的实现
C函数入栈顺序下面先摘录一些:================================================C/C++函数调用约定与函数名称修饰规则探讨使用C/C++语言开发软件的程序员经常碰到这样的问题:有时候是程序编译没有 问题,但是链接的时候总是报告函数不存在(经典的LNK 2001错误),有时候是程序编译和链接都没有错误,但是只要调用库中的函数就会转载 2013-05-06 17:18:15 · 1046 阅读 · 0 评论 -
对象析构谈—— delete this 的使用及注意事项
First Step - dive into "delete p"delete p执行了哪些步骤?delete p 是一个两步的过程:调用析构函数(释放类里边涉及new的内存),然后释放内存(类本身占的内存)。delete p产生的代码看上去是这样的(假设是Object*类型的):delete原语可以看作如下这样一个过程:p->~Object();p->oper转载 2013-03-18 23:16:54 · 627 阅读 · 0 评论 -
Linux进程调度时机
Linux的调度程序是一个叫Schedule()的函数,由它来决定是否要进行进程的切换。而所谓的调度时机则是在什么情况下执行调度程序。 主要有一下几种状况: 1、进程状态转换的时刻:进程终止、进程睡眠; 2、当前进程的时间片用完时(current->counter=0); 3、设备驱动程序 4、进程从中断、异常及系统调用返回到用户态时; 时机1,进程要调用sle转载 2013-03-19 09:15:54 · 846 阅读 · 0 评论 -
c++回调函数
对于很多初学者来说,往往觉得回调函数很神秘,很想知道回调函数的工作原理。本文将要解释什么是回调函数、它们有什么好处、为什么要使用它们等等问题,在开始之前,假设你已经熟知了函数指针。 什么是回调函数? 简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。 为什转载 2012-10-23 18:23:24 · 416 阅读 · 0 评论 -
用数组初始化vector
可以使用下面的代码初始化 vector. vector 构造函数会把 [int_array, int_array + 4) 的内容逐个拷贝到 vector 的node 中。 1. 注意 int_array + 4 指向的内容是不被拷贝构造的, last 指针处是开区间。2. vector 中存放的是自己的拷贝,他的内容改变了之后,数组的内容还是不受影响的。转载 2012-11-13 11:21:50 · 2605 阅读 · 0 评论 -
vector用法
注:at虽然是安全用法,但仍然会抛出异常导致程序core vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。 为了可以使用vector,必须在你的头文件中包含下面的代码转载 2012-11-21 21:27:17 · 353 阅读 · 0 评论 -
stl find和find_if
STL的find,find_if函数提供了一种对数组、STL容器进行查找的方法。使用该函数,需 #include 我们查找一个list中的数据,通常用find(),例如:文章来源:http://www.codelast.com/12345678910111转载 2012-11-22 11:06:17 · 492 阅读 · 0 评论 -
const详细总结
C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。 一、Const作用 如下表所示:No.作用说明参考代转载 2012-12-05 16:05:56 · 407 阅读 · 0 评论 -
hpp与.h区别
hpp在C++中的含义 hpp,其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该hpp文件即可,无需再 将cpp加入到project中进行编译。而实现代码将直接编译到调用者的obj文件中,不再生成单独的obj,采用hpp将大幅度减少调用 project中的cpp文件数与编译次数,也不用再发布烦人的lib与dll,因此非常适转载 2012-12-11 13:43:31 · 2506 阅读 · 0 评论 -
正确使用#include和前置声明(forward declaration)
在工作的过程中遇到了很多麻烦,当我往工程里加一个类,而且那个类又与工程里的类相关,如有那个类型的成员变量。情况如下//////A.h///////////class A{.......};////////B.h//////////class B:A{....A member;}结果,编译就会出错,说找不转载 2013-01-08 13:52:01 · 637 阅读 · 0 评论 -
虚指针 虚表之c++实现多态的方法
1、c++实现多态的方法其实很多人都知道,虚函数在c++中的实现机制就是用虚表和虚指针,但是具体是怎样的呢?从more effecive c++其中一篇文章里面可以知道:是每个类用了一个虚表,每个类的对象用了一个虚指针。具体的用法如下:class A{public: virtual void f(); virtual void g();private转载 2013-03-13 22:18:04 · 2464 阅读 · 1 评论 -
sizeof内存对齐和虚指针内存布局
对于对象的内存布局与内存对齐这个问题,其实是没有统一的说法的,因为实际情况还要联系你的平台与编译器以及编译器的设置。我的是VC7,XP系统,编译器的结构成员对齐设置为默认。下面针对两种情况来说说: 在没有虚拟函数的情况下。对象的内存布局比较简单。看下面的类: class A{ public:int m_a;转载 2013-03-18 23:12:15 · 826 阅读 · 0 评论 -
堆和栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两转载 2013-03-18 23:19:46 · 432 阅读 · 0 评论 -
mysql安装及使用实例
系统环境Ubuntu 12.041、安装mysql ubuntu下安装mysql是比较简单的,直接通过apt-get安装sudo apt-get install mysql-server-5.5 2、登入mysqlmysql [-h host_name] [-u user_name] [-p password] 其中参数-转载 2013-10-28 09:10:16 · 964 阅读 · 0 评论