
编程之路
berrybao
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C语言关键字学习(1)----- extern
序言: 如果C语言是程序员手下的一支精锐之师,那么基本语法是它的主力军,而关键字则是士兵们手中的利器。对于一个需要经常驰骋疆场的C程序员来说,如果不能把这柄利器运用自如的话,那么不仅会失去“一夫当关,万夫莫开”的雄风,甚至还会伤及自身。因此,我开了这么一个序列,尝试将兵器库里的各种奇异兵器玩耍一遍。另外,这里我介绍的关键字都是实践中遇到的。 一. 不要再见外了-----e原创 2012-03-30 10:17:50 · 496 阅读 · 0 评论 -
C语言--运算符优先级
对于不确定性问题,要想办法去确认,否则等待你的将会是Bug-----编程心得 上个月在南京为项目中增加一个控制监视模块的时候,草草地写完了代码,代码中有一句是这样的: if (indicator & 0x8000 == 0x8000) { do something } 这里,indicator是int型。我的意思是,如果indicator的第16位是1,那么原创 2012-09-11 12:09:58 · 558 阅读 · 0 评论 -
算法学习--分治法
分治法的思想是:将原问题划分为与原问题具有相似结构的小问题,然后递归地求解小问题。其解决问题的过程可归纳为以下三个步骤: 一,分解(Divide),将原问题分解为一序列子问题; 二,解决(Conquer),递归地解子问题,若子问题足够小了,那么就可以直接解决子问题; 三,合并(Combine),将子问题的结果合并为原问题的解。 这里学习学习使用分治法来求解序列排序问题,相应的排序算原创 2012-09-17 20:26:14 · 669 阅读 · 0 评论 -
C++对象模型
搞点兴奋神经的东西来活力我的早晨,而那个就是桌面上的C++对象模型了。 看这本书的目的不在于奇淫巧技,更想去体悟思想层面的东西,以获得一些编程心智上的开发。废话少说,看看书中给出的一个说明C++对象模型的例子吧。 class Point { public: POINT(float xval); virtual ~Point(); float x() const; static int Poi原创 2012-09-25 08:36:47 · 291 阅读 · 0 评论 -
C++关键字之static
#include using namespace std; class A { public: A(){}; ~A(){}; void set(int c) { a = c; }; void get(void) { cout<原创 2012-09-26 14:39:10 · 323 阅读 · 0 评论 -
关键字 -- restrict
restrict是C99新增的一个关键字,其主要目的是用来优化用的。它只能修饰指针。该关键字告诉编译器,哪些指针引用是可以优化的, 其方法是指明指针指向的对象,在函数中只通过该指针进行访问。 它的英文定义是: It can be applied only to pointers, and it indicates that a pointer is the sole initial m转载 2013-04-21 19:58:46 · 559 阅读 · 0 评论 -
数组初始化
提一个简单的问题:如何声明一个数组,并是他的所有元素被初始化为零? 可能答案:当初始化值的个数少于数组元素个数时,前面的按序初始化相应值, 后面的初始化为0(全局或静态数组)或为不确定值(局部数组)。 http://blog.chinaunix.net/uid-11092493-id-436388.html原创 2013-04-22 12:47:26 · 545 阅读 · 0 评论 -
自己玩玩的MakeFile
makefile命令的基本格式: Target : prerequisites .... command Target是要生成的东西,冒号后则是生成该目标所依赖的东西。而command则是make执行的命令。 千言万语,都不如一个简单的例子来的明了。 main : main.o func.o gcc -o main main.o func原创 2013-04-18 15:00:10 · 682 阅读 · 0 评论 -
多线程
好吧,自己搞了快十天的多线程算法程序,最后被告知,原来可以用openMP搞定 虽然如此,仍然最喜欢自己搞的。自己做,是一件伟大的事情!原创 2013-04-26 15:14:44 · 515 阅读 · 0 评论 -
不解的Bug
今日在写ALM算法的C代码的时候,遇到了一个令我匪夷所思的Bug。现将相关现象记录如下: 在一个名为utils.c的文件中定义函数dabs,并且在头文件utils.h中申明了它并使用了extern关键字。然后我在alm.c的文件中使用到了dabs函数,但是在该.c的文件中我忘记了include utils.h头文件。结果编译链接之后,对dabs的调用计算不正确。在alm.c文件中包含了uti原创 2013-04-21 10:30:48 · 638 阅读 · 0 评论 -
系统调用
这个等看的够明白了再写,不过这里先放个图,很能说明问题。 一、系统调用参数传递 用户态的程序在调用函数时,将它的参数写到程序栈里面去。而系统调用则是将它的参数传递给相应的system call hanlder,并存储在CPU的寄存器中,然后在复制到内核栈 。之所以还要复制到内核栈,是因为system call service routines是普通的C函数。另外不直接将参数从用户栈复原创 2012-09-27 21:36:31 · 308 阅读 · 0 评论 -
再学C++,从零开始
第一次接触C++已经是几年前风华正茂的事了,是那个第一教我们编程语言的湛老师给我们讲的课。那个时候,对于连C语言考试都不能及格的我来说,C++显然是太为难我了。而我也的确没有怎么去刁难自己,依然是自我地逍遥自在去了。所以,对于C++,我只是有一种似曾相识的感觉!不过,今天开始,它却又要走进我的生活里,那么就从零开始怕。 昨晚变了一个简单的C++程序,里面只有一个类,代码如下: /* * io原创 2012-03-19 09:32:37 · 553 阅读 · 0 评论 -
C语言头文件那点事--我的模板
地球人都知道,C语言有.c和.h两种类型的文件,前者是程序文件,它用来保存程序的逻辑实现,后者是头文件,它用来保存一些共用的数据类型和函数接口等的申明。为什么需要头文件类?这是现实需求的产物,有了头文件,就可以将程序的具体实现和使用接口分开,由此用户不需要了解程序的逻辑实现也可以使用程序提供的功能。因此,一个具有很高通用性的头文件,就好比是一张免签护照一样,它本身做的越好,那么它就能够在各种环境下原创 2012-04-06 16:00:37 · 734 阅读 · 0 评论 -
Linux编程之路---共享内存
所有共享内存块的大小都必须是系统页面大小的整数倍。 ----------------------不知那门的定律 一、 共享内存编程的两种标准 在Unix编程环境下,存在两种不同的共享内存编程标准:一是POSIX标准,二是System V标准。这两套标准提供的接口函数分别如下。 PO原创 2012-04-06 20:49:39 · 297 阅读 · 0 评论 -
关于套接字的一点学习
这几天写程序的中心点是socket,因为手上的一个项目在这一块出了些问题。问题在于我写的程序向伙伴写的程序发送数据,他的程序未能正确接收到我发送的数据。原以为套接字编程就是简简单单地几个socket库函数的使用而已,但现实的问题却总在提醒我,“哥们,你还太天真了!”。痛定思痛,有了以下几点新的认识。 1.流数据的读写,不是一次完成的(如果数据比较大),而是可能分成好几读到的。这个就像是网络中发送原创 2012-05-29 22:31:29 · 469 阅读 · 0 评论 -
C语言main函数
我想,绝大多数程序员写的第一个函数必定是main函数,就如同刚出生的小孩第一眼见到的是她的亲妈一样。但是,对于如此亲密的main函数,我们真的是对它了如执掌吗? 那可未必。在此,我写下我浅薄的认识。 很多初学者在写第一个C语言程序的时候,会把main函数写成这样: void main() { ..... ..... }我从开始学习C语言直到毕业,都是像上面那样写main函数。不原创 2012-04-07 16:35:23 · 1164 阅读 · 0 评论 -
CMake简单使用
作为一个linux后现代程序员,对于远古时代的自动化构建工具make很是敬畏,但却真的没有那么大的勇气去写makefile,特别是当项目比较大的时,仅仅是写makefile就会把好端端的一个人搞残搞废。还好,同样有此体会的牛人们搞出了cmake,这样一来,makefile不用自己亲手写了,它也可以被自动生成了,而生成它的cmake则要简单的多。 一、从最简单的开始 假如我们用CMake来管理经原创 2012-07-06 09:40:16 · 748 阅读 · 0 评论 -
sizeof VS strlen
char buf[] = "Hello world" sizeof(buf) - 1 = strlen(buf) 1.sizeof 是个宏,故而sizeof(buf)在编译时即以知道。另外,它计算的是整个缓冲区的长度,包括字符串末尾的'\0'。 2.strlen是个函数,只有运行时才知道结果。它计算的字符串长度不包括末尾的\0原创 2012-06-26 11:10:23 · 370 阅读 · 0 评论 -
C程序运行
C程序运行流程: 1.内核执行C startup routine。在该startup routine中,内核运行exec函数族中一个来运行C程序。 2.被exec运行的C程序 从main函数开始执行. ISO C规定的main函数原型为如下形式: int main(int argc, char *argv[]);3.C程序运行完毕。以下为程序正常退出的五种方式: a. ret原创 2012-06-26 10:31:10 · 459 阅读 · 0 评论 -
gdb调试子进程
用gdb调试多进程的程序会遇到困难,gdb只能跟踪一个进程(默认是跟踪父进程),而不能同时跟踪多个进程,但可以设置gdb在fork之后跟踪父进程还是子进程。 具体方法如下: 在使用GDB启动程序后,首先调试的是父进程,若要切换成调试子进程,那么使用命令 set follow-fork-mode child原创 2012-06-29 10:28:48 · 1583 阅读 · 0 评论 -
linux多线程编程
UNIX中,每个线程用一个唯一的ID标识,ID数据类型为pthread_t。对线程ID进行处理的有以下两个函数接口: int pthread_equal(pthread_t tid1, pthread_t tid2); //比较两个线程ID是否相同 pthread_t pthread_self(void); //获取本线程的ID 在传统的UNIX进程模型中,每个进程只有一个控制线程。原创 2013-04-22 10:03:23 · 585 阅读 · 0 评论