03 2012 档案

摘要:这本书中列出了31章共1500个知识点,带有很多的例子。本书适合对C/C++有一些了解的程序员进行查缺补漏。因为这里边对知识点的讲解比较凌乱不是很条理,前面的内容有时就用到了后面内容,如果你不是了解的话,读起来就比较困难了。本书还有一个很大的特点是很多地方是针对Dos 平台的,我是使用的linux,所以有很多地方是不适合的。即便是对于windows 平台,有些地方可能也不适用了。因为这本书还是比较老的。有些不需要的地方可以跳过。关于C++的介绍,如果你是刚刚学C++话还是要先读《C++ Primer》,那本书比较条理,可以让你理清关系。了解各个知识点。书最后的关于Windows编程的部分我基本 阅读全文
posted @ 2012-03-30 16:49 Mr.Rico 阅读(1738) 评论(0) 推荐(0) 编辑
摘要:这个是在《C/C++程序员实用大全·精华版:C/C++最佳编程指南》一书中提到了"ANSI设备驱动器"。在shell编程中也是类似的。要是通过彩色化提示符来增加个性化,就要用到转义序列。 转义序列就是一个让 shell 执行一个特殊步骤的控制指令。 转义序列通常都是以 ESC 开头(这也是它的命名原因)。 在 shell 里表示为 ^[。这种表示法需要一点时间去适应, 也可以用 \033 完成相同的工作(ESC 的 ASCII 码用十进制表示就是 27, = 用八进制表示的 33)。要直接在 shell 里面输入转义序列我们需要先按 ctrl-v:CTRL-v E 阅读全文
posted @ 2012-03-27 21:11 Mr.Rico 阅读(661) 评论(0) 推荐(0) 编辑
摘要:这是在《C专家编程》一书上提到的一个问题。我在网上搜索了一下,找到了一些解法,总结如下。首先是《C专家编程》上提到解法:#define ISUNSIGNED(a) (a>=0 && ~a>=0)#define ISUNSIGNED(type) ((type)0-1 > 0)第二个从类型来判断,没有问题。而第一个只能用在K&R C里,在ANSI C里就不行了。当这个宏被用在int/unsigned int时,没有任何问题。但是当使用在char和short上就会出错。分析: 此宏在int/unsigned int好使的原因是宏中的a的精度始终不会发生变化, 阅读全文
posted @ 2012-03-27 21:10 Mr.Rico 阅读(3272) 评论(1) 推荐(0) 编辑
摘要:内联函数并不总是内联 Inline function是在C++中引入的一种机制,它可以拓展函数代码,避免调用函数的额外开销。在Linux环境下,gcc编译选项必须加上优化选项才能使inline有效。inline与static的关系在这儿有一个比较详细的分析:http://www.cnblogs.com/xkfz007/articles/2370640.html 内联函数(inline)机制与陷阱 内联机制被引入C++作为对宏(Macro)机制的改进和补充(不是取代)。内联函数的参数传递机制与普通函数相同。但是编译器会在每处调用内联函数的地方将内联函数的内容展开。这样既避免了函数调用的开销... 阅读全文
posted @ 2012-03-27 21:09 Mr.Rico 阅读(16715) 评论(0) 推荐(0) 编辑
摘要:const: const 是一个左结合的类型修饰符,它与其左侧的类型修饰符和为一个类型修饰符。const可以用于定义常量,可以限定函数的引用参数(因为传值的参数根本不用限定),可以限定函数返回值为引用的情况。还有一个用法是修饰类的成员函数。这样情况下,在类内的声明和类外的定义都要加上const。 还有一种情况是,声明类的const成员变量的时候,如何进行初始化。在这种情况下,由于常量不能修改,所以只能在构造函数的初始化列表中进行复制初始化。如果同时声明为了static时可以在类外进行初始化,但此时不能加static关键字。mutable: mutalbe的中文意思是"可变的,易变的& 阅读全文
posted @ 2012-03-27 21:09 Mr.Rico 阅读(2945) 评论(0) 推荐(0) 编辑
摘要:在看《你必须知道的496个C语言问题》一书中,提到"达夫设备"这个东西,主要是下面的代码: register n = (count + 7) / 8; /\* count > 0 assumed \*/ switch (count % 8) { case 0: do { \*to = \*from++; case 7: \*to = \*from++; case 6: \*to = \*from++; case 5: \*to = \*from++; case 4: \*to = \*from++; ... 阅读全文
posted @ 2012-03-27 21:08 Mr.Rico 阅读(6412) 评论(3) 推荐(1) 编辑
摘要:下面是一些比较重要的宏定义,记录一下:assert断言:#define assert(cond) ((cond)?(void)0:_assert(#cond,__FILE__,__LINE__)) void _assert(char*cond,char*filename,long lineno) { printf("assert:%s in file:%s, at line:%d\n",cond,filename,lineno); }获得结构体中域的偏移量#define offsetof(type,field) ((int)((char*)&(((type*)0)- 阅读全文
posted @ 2012-03-27 21:07 Mr.Rico 阅读(1060) 评论(0) 推荐(0) 编辑
摘要:Quine 以哲学家 Willard van Orman Quine (1908-2000) 而命名,表示一个可以生成他自己的完全的源代码的程序。编写出某个语言中最简短的 quine 通常作为黑客们的消遣。作为真正的 quine ,有一些约定:程序不能接受输入或者是打开文件,因为那样就可以直接输入源代码或者是把源代码文件直接打开再重新打印出来,就没有什么意思了;同时,一个完全空白的程序(产生完全空白的输出,即没有输出)也并不能称作 quine 。quine 的想法最初出现在 Bratley, Paul and Jean Millo. "Computer Recreations; Se 阅读全文
posted @ 2012-03-27 21:07 Mr.Rico 阅读(8726) 评论(0) 推荐(0) 编辑
摘要:网上搜索了一下,发现检测内存泄漏的工具还是很多的。下面是从网上找到的一些材料,主要是在linux系统中内存泄漏的检测方法。(1)什么是内存内存泄漏? 在此,谈论的是程序设计中内存泄漏和错误的问题,不过,并不是所有的程序都有这一问题。首先,泄漏等一些内存方面的问题在有的程序语言中是不容易发生的。这些程序语言一般都认为内存管理太重要了,所以不能由程序员来处理,最好还是由程序语言设计者来处理这些问题,这样的语言有Perl、Java等等。 然而,在一些语言(最典型的就是C和C++)中,程序语言的设计者也认为内存管理太重要,但必需由开发人员自己来处理。内存泄漏指的是程序员动态分配了内存,但是在... 阅读全文
posted @ 2012-03-27 21:05 Mr.Rico 阅读(1091) 评论(0) 推荐(0) 编辑
摘要:先通过一个小程序来看一看: #include void foo(int x, int y, int z) { printf("x = %d at [%X]n", x, &x); printf("y = %d at [%X]n", y, &y); printf("z = %d at [%X]n", z, &z); } int main(int argc, char *argv[]) { foo(100, 200, 300); return 0; }运行结果:x = 100 at [... 阅读全文
posted @ 2012-03-27 21:04 Mr.Rico 阅读(30262) 评论(1) 推荐(6) 编辑
摘要:线性同余随机数生成器介绍:古老的LCG(linearcongruentialgenerator)代表了最好最朴素的伪随机数产生器算法。主要原因是容易理解,容易实现,而且速度快。LCG 算法数学上基于公式:X(n+1)=(a*X(n)+c)%m其中,各系数为:模m,m>0系数a,0<a<m增量c,0<=c<m原始值(种子)0<=X(0)<m其中参数c,m,a比较敏感,或者说直接影响了伪随机数产生的质量。一般而言,高LCG的m是2的指数次幂(一般2^32或者2^64),因为这样取模操作截断最右的32或64位就可以了。多数编译器的库中使用了该理论实现其伪随机 阅读全文
posted @ 2012-03-27 21:03 Mr.Rico 阅读(24863) 评论(0) 推荐(3) 编辑
摘要:编译器的发展:上世纪50年代,IBM的John Backus带领一个研究小组对FORTRAN语言及其编译器进行开发。但由于当时人们对编译理论了解不多,开发工作变得既复杂又艰苦。与此同时,Noam Chomsky开始了他对自然语言结构的研究。他的发现最终使得编译器的结构异常简单,甚至还带有了一些自动化。Chomsky的研究导致了根据语言文法的难易程度以及识别它们所需要的算法来对语言分类。正如现在所称的Chomsky架构(Chomsky Hierarchy),它包括了文法的四个层次:0型文法、1型文法、2型文法和3型文法,且其中的每一个都是其前者的特殊情况。2型文法(或上下文无关文法)被证明是程序 阅读全文
posted @ 2012-03-27 21:01 Mr.Rico 阅读(4150) 评论(0) 推荐(0) 编辑
摘要:1. 关键字volatile有什么含意?并给出三个不同的例子。 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:(1)并行设备的硬件寄存器(如:状态寄存器) (2)一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) (3) 多线程应用中被几个任务共享的变量 回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。搞嵌入式 阅读全文
posted @ 2012-03-27 20:54 Mr.Rico 阅读(954) 评论(0) 推荐(0) 编辑
摘要:这是一篇从网上看到的一篇文章,讲得挺有道理。记录下来。(1) 精英化趋势 C++是一门引起无数争议的语言。眼下最常听到的声音则是C++将趋于没落,会被某某语言取代。我很怀疑这种论调的起点是商业宣传,C++的真实趋势应该是越来越倾向于精英化。精英化是指在可用可不用C++的领域中,C++将逐渐退出,而所有剩下必须用C++的领域通常都是附加值比较高,难度较高的领域,比如:操作系统,数据库,大型网站后端等。这一过程造成的现象就是在TIOBE上,C++的份额逐步下降。但就像经济上挤泡沫一样,这倒不是C++衰落了,而是原本人们对C++的期望过高了。早在1995年,美国的调查机构就曾经预测:"终端 阅读全文
posted @ 2012-03-27 20:45 Mr.Rico 阅读(1428) 评论(0) 推荐(0) 编辑
摘要:利用mplayer中的mencoder来将y4m文件转换为yuv文件。YUV4MPEG2这种文件格式是一种以头文件存储视频规格的未压缩视频序列。简单来说,在原始的yuv序列的起始和每一帧的头部都加入了纯文字形式的视频参数信息,包括分辨率、帧率、逐行/隔行扫描方式、高宽比(aspect ratio),以及每一帧起始的"FRAME "标志位。(1)利用mencoder可以将y4m转换为yuv文件:mencoder **.y4m -ovc raw -of rawvideo -vf format=i420 -o **.yuv(2)mplayer 播放yuv和264文件.yuv:mp 阅读全文
posted @ 2012-03-26 15:44 Mr.Rico 阅读(1427) 评论(0) 推荐(0) 编辑
摘要:mplayer是一款非常强大的播放器,至少在linux中,大部分的视频播放都可以由它来完成。我也一直在使用mplayer,用着很不错。一般我都是在命令行直接调用mplayer来播放电影。但是在使用的时候,感觉有一点很不爽:如果想快进的话,只能去按方向键。一般情况下按方向键的话,手就要离开键盘了。反正感觉很不爽。而我现在也会一些vi的操作,对jk键非常喜欢。所以就想,能不能用jk键实现快进和快退呢?然后我就从网上搜索相关内容,这种关于mplayer自定义按键的帖子很少。还好,从一些帖子中了解到mplayer的按键控制是放在文件/etc/mplayer/input.conf文件中的:RIGHTs. 阅读全文
posted @ 2012-03-25 23:34 Mr.Rico 阅读(2711) 评论(0) 推荐(0) 编辑
摘要:C和C++之间的关系非常的密切,我们也都知道C++是从C扩充而来的,但是这并不表示C++对C完全兼容。C++并不是C的超集,C的有些特性在C++中并不适用。看完《C专家编程》之后,从中了解到了几个。简单总结一下。 (1)在C++中,用户代码不能调用main函数,但在C语言中却是允许的。(所以可以递归调用main函数)比如:#include <stdio.h>int a=5;int main(){if(a==0)return 0;else{printf("call main again:%d\n",a);a--;main();}return 0;}输出如下:cal 阅读全文
posted @ 2012-03-12 15:33 Mr.Rico 阅读(1093) 评论(0) 推荐(0) 编辑
摘要:C++ Primer v3前两天看完了《C++ primer》的第4版,今天刚看完第3版。第3版看得比较粗略。总的感觉是第4版显得比较条理,第3版的细节比较分散。第4版中将很多应该注意的知识点都重点强调了一下,从第3版不好区分哪些比较重点。 第一章 C++概述1. 编译C++程序时,编译器自动定义了一个预处理器名字__cplusplus.在编译标准C时,编译器自动定义宏__STDC__。当然,__cplusplus和__STDC__不能被同时定义第二章 C++浏览1. C++中的数组在内置数据类型与标准库类的类型之间是复合类型(compound type)特别是指针和数... 阅读全文
posted @ 2012-03-10 18:17 Mr.Rico 阅读(382) 评论(0) 推荐(0) 编辑
摘要:对于下面的程序:View Code #include<iostream>#include<string>usingstd::string;//usingstd::size_t;usingstd::endl;usingstd::cout;classItem_base{public:Item_base(conststring&book="",doublesales_price=0.0):isbn(book),price(sales_price){cout<<"base:constructor"<<end 阅读全文
posted @ 2012-03-05 11:34 Mr.Rico 阅读(358) 评论(0) 推荐(0) 编辑
摘要:第15章 面向对象编程 面向对象中的三个基本概念:数据抽象,继承和动态绑定。 C++中利用类进行数据抽象,用类派生从一个类继承另一个类。动态绑定使编译器能够在运行时决定是使用基类中定义的函数还是派生类中定义的函数。 1. 多态性 面向对象的关键思想是多态性。在C++中,多态性仅用于通过继承而相关联的类型的引用或指针。 2. 继承 在C++中,基类必须指出希望派生类重定义哪些函数,定义为virtual的函数是基类期待派生类重新定义的。而那些基类希望派生类继承的函数不能定义为虚函数。 除了构造函数之外,任意非static成员函数都可以是虚函数。并且,保留字virtural只在类内部的成员函数... 阅读全文
posted @ 2012-03-05 00:07 Mr.Rico 阅读(907) 评论(0) 推荐(0) 编辑
摘要:Linux命令行和shell脚本编程宝典这次阅读《Linux命令行和shell脚本编程宝典》这本书是第3次阅读。 总的来说,这本书还是挺不错的。很适合入门。我也是从这本书开始了解shell编程的。不过,因为现在对Linux 环境也比较熟悉了,并且也会一些shell编程了,所以,这次看的时候会比较快,有些已经会的东西就没有写。只是记录下那些之前没有注意到的东西。第1章 Linux shell入门 Linux 内核 GNU软件:Gnome shell Gnome软件 Linux发行版(1)核心发行版 (2)特定发行版 第2章 了解shellLinux下的虚拟控制台:ctr... 阅读全文
posted @ 2012-03-04 16:05 Mr.Rico 阅读(4829) 评论(0) 推荐(0) 编辑
摘要:第十八章、认识系统服务 (daemons)1. 什么是 daemon 与服务 (service) 我们在第十七章就曾经谈过『服务』这东西! 当时的说明是『常驻在记体体中的程序,且可以提供一些系统或网络功能,那就是服务』。而服务一般的英文说法是『 service 』。 但如果你常常上网去查看一些数据的话,尤其是 Unix-Like 的相关操作系统,应该常常看到『请启动某某 daemon 来提供某某功能』!那么 daemon 与 service 有关啰?否则为什么都能够提供某些系统或网络功能?此外,这个 daemon 是什么东西呀? daemon 的字面上的意思就是『守护神、恶魔?』简单的说,.. 阅读全文
posted @ 2012-03-02 22:40 Mr.Rico 阅读(1440) 评论(0) 推荐(0) 编辑
摘要:第13章 学习Bash Shell 第14章 Linux账号管理与ACL权限设定 /etc/shadow文件 Su使用su总结一下用法是这样的:  若要完整的切换到新使用者的环境,必须要使用『 su - username 』或『 su -l username 』, 才会连同 PATH/USER/MAIL 等变量都转成新用户的环境;  如果仅想要执行一次 root 的指令,可以利用『 su - -c "指令串" 』的方式来处理;  使用 root 切换成为任何使用者时,并与需要输入新用户的密码; 虽然使用 su 很方便啦,与过缺点是,当我的主机是多人共管的环境时,如果大 阅读全文
posted @ 2012-03-02 22:36 Mr.Rico 阅读(854) 评论(0) 推荐(0) 编辑
摘要:第八章、Linux 磁盘与文件系统管理1. 文件系统特性 2. 文件系统的运作方式 常常会听到所谓的『碎片整理』吧? 需要碎片整理的原因就是档案写入的 block 太过于离散了,此时档案读取的效能将会变的很差所致。 这个时候可以透过碎片整理将同一个档案所属的 blocks 汇整在一起,这样数据的读取会比较容易啊! 想当然尔,FAT 的文件系统需要三不五时的碎片整理一下,那么 Ext2 是否需要磁盘重整呢? 由于Ext2 是索引式文件系统,基本上不太需要常常进行碎片整理的。但是如果文件系统使用太久, 常常删除/编辑/新增档案时,那么还是可能会造成档案数据太过于离散的问题,此时或许会需要进行重.. 阅读全文
posted @ 2012-03-02 22:33 Mr.Rico 阅读(1261) 评论(0) 推荐(0) 编辑
摘要:<<鸟哥私房菜>>记录第1章 计算机概论CPU的种类CPU主要分为两类:精简指令集RISC和复杂指令集CISC。对于精简指令集,常见系列有Sun公司的SPARC系列,IBM公司的PowerPC系列,和ARM系列复杂指令集主要有AMD,Intel 和VIA的x86系列的CPU第3章 主机规划与磁盘分区1. 磁盘介绍 整颗磁盘的第一个扇区特别重要,它记录了两个重要的信息: (1) MBR (master boot record) 主要启动记录区: 可以安装开机管理程序的地方, 有446bytes (2) 分区表 (partition table): 记录整个磁盘的分区状态, 阅读全文
posted @ 2012-03-02 22:30 Mr.Rico 阅读(2980) 评论(0) 推荐(1) 编辑