判断大端小端机器的两种方法

第一种,使用位段:#include <stdio.h>struct data{ unsigned int a:3; unsigned int b:2; unsigned int c:3;};int main(){ struct data abc; unsigned char* s = (unsigned char*) &amp;abc; *s = 0x99; if(abc.a == 1) printf("you are using big_endian machine\n"); else printf("you ...
系统 | 2011-09-03 10:52 | 阅读 1183 次 | 评论 2 条

zz 笑话中的需求分析感悟

转载自:http://blog.sina.com.cn/s/blog_4c451e0e0100axga.html某日,老师在课堂上想考考学生们的智商问一个男孩:“树上有十只鸟,开枪打死一只,还剩几只?”男孩反问:“是无声枪么?”“不是。”“枪声有多大?”“80~100分贝。”“那就是说会震的耳朵疼?”“是。”“在这个城市里打鸟犯不犯法?”‘不犯。”“您确定那只鸟真的被打死啦?”“确定。”老师已经不耐烦了,”拜托,你告诉我还剩几只就行了,OK?”“OK。鸟里有没有聋子?”“没有。”“有没有关在笼子里的?”“没有。”“边上还有没有其他的树,树上还有没有其他鸟?”“没有。”“方圆十里呢?”“就...
休息 | 2011-05-10 17:10 | 阅读 1001 次 | 评论 0 条

zz Ubuntu 下安装 Code::Blocks

转载自:http://blog.sina.com.cn/s/blog_4c451e0e0100eq4h.html 在 Ubuntu 操作中安装 Code::Blocks 步骤如下:安装步骤:1.先把编译环境,C库、C++库和Boost库装好,如下:sudo apt-get install build-essential* 有可能安装 build-essential 后gdb就已经安装过了 sudo apt-get install gdb2. 在 Ubuntu 软件中心 中安装 Code::Blocks IDE3. 安装 Code::Blocks 的调试组件 Valgrind 用来探测...
Tools | 2011-05-10 15:56 | 阅读 1473 次 | 评论 0 条

失效迭代器

失效迭代器(Invalidating Iterators)当一个容器变化时,指向该容器中元素的迭代器可能失效。这使得在迭代器变化期间改变容器容易出现问题。在这方面,不同的容器提供不同的保障:vectors: 引起内存重新分配的插入运算使所有迭代器失效,插入也使得插入位置及其后位置的迭代器失效,删除运算使得删除位置及其后位置的迭代器失效.list/map: 插入不会使得任何迭代器失效;删除运算使指向删除位置的迭代器失效,但是不会失效其他迭代器.

原 二叉树非递归前序中序后序遍历的模板写法

话不多说,上代码前中序需要一个栈: stack<struct tree*> st;后序需要带标记的栈: stack<struct flagNode> sk;struct flagNode{ struct tree *ptr; bool right;}前序遍历: cout << "前序遍历\n"; p = root; while(p != NULL || !st.empty()) { if(p != NULL) { cout << p->data << ' '; if(p->rchild...
算法 | 2011-04-08 10:28 | 阅读 767 次 | 评论 0 条

zz 拷贝构造函数及其参数类型

拷贝构造函数的参数类型必须是引用,而且通常情况下还是const的,但是const并不是严格必须的。 #include <iostream> #include <string> using namespace std; class CClass { public: CClass() : a(1), b("Hello, world.") { } // 拷贝构造函数,参数中的const不是严格必须的,但引用符号是必须的 CClass(const CClass&amp;...
默认分类 | 2011-03-31 00:31 | 阅读 863 次 | 评论 0 条

zz 为什么需要auto_ptr_ref

转载自:http://www.udpwork.com/item/2452.html 感谢原作者,本人也被困扰了整一个晚上。 +++++++++++++++++++++++++++++++++++ 这几天开始拜读侯捷先生和孟岩先生的译作《C++标准程序库:自修教程与参考手册》。两位先生确实译功上乘,读得很顺。但是读到P55页关于auto_ptr_ref的讨论,却百思不得其解:为什么需要引入auto_ptr_ref这个辅助类呢? 从书中描述来看,仿佛与拷贝构造函数、右值、类型转换有关。于是,结合auto_ptr的源代码,google之、baidu之,找了一推资料,终于初步搞清该问...
默认分类 | 2011-03-31 00:30 | 阅读 959 次 | 评论 0 条

堆内存和栈内存的划分[C][内存管理][转载]

一. 在c中分为这几个存储区 1.栈 - 由编译器自动分配释放 2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放 4.另外还有一个专门放常量的地方。- 程序结束释放 ...

zz C语言:typedef详解

1. 基本解释   typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。   在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。   至于typedef有什么微妙之处,请你接着看下面对几个问题的具体阐述。  2. typedef &amp; 结构的问题   当用下面的代码定义一个结构时,编译器报了一个错误,为什么呢?莫非C语言不允许在结构中包含指向它自己的指针吗?请你先猜想一下,然后看下文说明...
默认分类 | 2011-03-28 09:24 | 阅读 757 次 | 评论 0 条

程序员那些悲催的事儿

在StakeOverflow上有这样一个贴子叫“Confessions of your worst WTF moment”(WTF就是What the fuck的缩写),挺有意思的,我摘几个小故事过来,希望大家在笑过之后能从中学到什么——所有的经验都是从错误中来的(我在其中加了一些点评)我们公司的软件是给警察局用的,那是一个对用来处理被逮捕的人的系统,此系统还需要收集脸部特征和指纹信息,并且,这个系统和会向FBI的系统提交这些信息。当我们在测试这个系统的时候,我们一般都是用我们自己的指纹,当然,数据库联着的是我们的测试数据库。不过,有一次,在我们测试完后,我们忘了把系统切换回生产库,于是...
休息 | 2011-03-27 10:34 | 阅读 1001 次 | 评论 0 条

C++中不常用的关键字

转自:http://pcedu.pconline.com.cn/empolder/gj/c/0412/514980_3.html mutable关键字  关键字mutable是C++中一个不常用的关键字,他只能用于类的非静态和非常量数据成员  我们知道一个对象的状态由该对象的非静态数据成员决定,所以随着数据成员的改变,  对像的状态也会随之发生变化!  如果一个类的成员函数被声明为const类型,表示该函数不会改变对象的状态,也就是  该函数不会修改类的非静态数据成员.但是有些时候需要在该类函数中对类的数据成员  进行赋值.这个时候就需要用到mutable关键字了  例如:  class...

关于C++的 explicit关键字

简而言之:explicit修饰的构造函数不能担任转换函数。首先这个关键字只能用在类构造函数。它的作用是不能进行隐式转换。当构造函数参数超过两个时自动取消隐式转换。但是另外一种情况例外:其中只有一个必须输入的参数,其余的为有默认值的参数。此时隐式转换又开启了。以下是 《ANSI/ISO C++ Professional Programmer's Handbook 》是这样说的explicit ConstructorsA constructor that takes a single argument is, by default, an implicit conversion operat...

C语言逻辑运算(&amp;&amp;,&gt;&gt;,&lt;&lt;......)

. C语言中的位操作符因为C语言的设计目的是取代汇编语言,所以它必须支持汇编语言所具有的运算能力,所以C语言支持全部的位操作符(Bitwise Operators)。位操作是对字节或字中的位(bit)进行测试、置位或移位处理,在对微处理器的编程中,特别适合对寄存器、I/O端口进行操作。因而本节将对此作比较详细地介绍。6种位操作符的形式与含义如下:&amp; :按位“与”(AND);| :按位“或”(OR);^ :按位“异或”(XOR);~ :“取反” (NOT);>> :数据右移;<< :数据左移;1) 按位“与”运算按位“与”运算符 &amp; 的作用是对运算符两侧以二进制表达的操作数...
C | 2010-11-08 09:25 | 阅读 1630 次 | 评论 0 条

有关 __P()宏

extern void _sig_ign __P ((int sig)); 理解为_sig_ign为函数名, __P() 为宏定义。例如:#define __P(s)s 然后上面的声明编译结果为extern void _sig_ign(int sig);这样可以通过这个宏控制此函数的参数类型,如果:#define __P(s)(void)则这个函数变为无参数。P应该是parameter的意思。extern void _sig_ign __P ((int sig));这种写法是一种比较普遍的编程风格,你可以google一下__P,会发现很多类似这种的函数声明,C库里面很多函数如此声明主要原...
C | 2010-11-02 16:41 | 阅读 741 次 | 评论 0 条

zz linux内核中的list_entry宏

初学linux内核代码,将学习中的一些知识点保存起来,方便以后查阅。 list_entry宏是用来根据list_head指针查找链表所嵌入的结构体的地址,具体查找方法如下: #define list_entry(ptr, type, member) \ container_of(ptr, type, member) list_entry只是一层封装,实际上起作用的是container_of宏, #define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member )...
默认分类 | 2010-10-29 14:51 | 阅读 870 次 | 评论 0 条

zz端口劫持、端口重用和端口独占程序的设计

前段时间,一个朋友发来邮件,说在RedHat Linux 9.0 操作系统的机器上,编写了一个服务程序。该服务程序用Ctrl+C终止后,不能够马上重新运行。出现地址绑定错误,也就是调用bind()函数时,出现错 误。但过了几分钟后,即可以正常运行。不明白原因,并希望能给于解决。 首先,来了解出现这个问题的原因。如果出现上面的情况,可以用 netstat -an 命令查看一下,就会发现那个服务程序所使用的端口处在CLOSE_WAIT状态。当程序执行主动关闭的时候,就会进入这种状态。还有一种情况,就是客户端 还在保持连接,但服务器却意外终止,这种情况,也会有这种状态产生,特别是在一些老的UN...
网络 | 2010-10-19 20:50 | 阅读 939 次 | 评论 0 条

zz对_stdcall 的理解

在C语言中,假设我们有这样的一个函数:int function(int a,int b)调用时只要用result = function(1,2)这样的方式就可以使用这个函数。但是,当高级语言被编译成计算机可以识别的机器码时,有一个问题就凸现出来:在CPU中,计算机没有办法知道一个函数调用需要多少个、什么样的参数,也没有硬件可以保存这些参数。也就是说,计算机不知道怎么给这个函数传递参数,传递参数的工作必须由函数调用者和函数本身来协调。为此,计算机提供了一种被称为栈的数据结构来支持参数传递。栈是一种先进后出的数据结构,栈有一个存储区、一个栈顶指针。栈顶指针指向堆栈中第一个可用的数据项(被称为...
系统 | 2010-09-01 19:39 | 阅读 739 次 | 评论 0 条

zz内存池技术的介绍文章

曾经看到过一篇关于内存池技术的介绍文章,受益匪浅,拿出来分享。 原贴地址:http://www.ibm.com/developerworks/cn/linux/l-cn-ppp/index6.html 6.1 自定义内存池性能优化的原理 如前所述,读者已经了解到"堆"和"栈"的区别。而在编程实践中,不可避免地要大量用到堆上的内存。例如在程序中维护一个链表的数据结构时,每次新增或者 删除一个链表的节点,都需要从内存堆上分配或者释放一定的内存;在维护一个动态数组时,如果动态数组的大小不能满足程序需要时,也要在内存堆上分配新的内 存空间。6.1.1 默认内存管理函数的不足利用默认的内存管理...
默认分类 | 2010-08-09 11:42 | 阅读 773 次 | 评论 0 条

zz检查素数的正则表达式

一般来说,我们会使用正规表达式来做字符串匹配,今天在网上浏览的时候,看到了有人用正则表达式来检查一个数字是否为素数(质数),让我非常感兴趣,这个正则表达式如入所示:检查素数与否的正则表达式要使用这个正规则表达式,你需要把自然数转成多个1的字符串,如:2 要写成 “11”, 3 要写成 “111”, 17 要写成“11111111111111111”,这种工作使用一些脚本语言可以轻松的完成。一开始我对这个表达式持怀疑态度,但仔细研究了一下这个表达式,发现是非常合理的,下面,让我带你来细细剖析一下是这个表达式的工作原理。首先,我们看到这个表达式中有“|”,也就是说这个表达式可以分成两个部分:...
默认分类 | 2010-08-09 10:23 | 阅读 778 次 | 评论 0 条

zz编程命名中的7+1个提示

1.- 变量应该是尽可能的望文知意。千万不要使用教材中的命名方式。好的变量: daysDateRange, flightNumber, carColor.坏的变量: days, dRange, temp, data, aux…在我们的日常工作中,有很大数量的开发人员喜欢使用短的变量名,而不是有含义的变量名。这主要是因为我们大学教科书的那些示例所造成的,人都是先入为主,所以,教科书中的那些很抽象,带着演示的变量命名影响了我们一代又一代的程序员,并影响了他们很多年。虽然那些短的,教材式的变量名,可能会让你少打一些字,但其实,这是非常非常不好的。因为软件的维护成本远远大于了软件的开发成本,如果...
默认分类 | 2010-08-09 10:22 | 阅读 849 次 | 评论 0 条
浏览25289次