C/C++
DIY-GEEKER
若有恒,何必三更眠五更起;最无益,莫过一日曝十日寒
展开
-
multiple definition ; first defined here
main.o(.data+0x0): multiple definition of `rect'renlianjiance.o(.data+0x0): first defined heremain.o(.data+0x880): multiple definition of `LBP_tree'renlianjiance.o(.data+0x880): first defined he原创 2012-05-31 14:12:32 · 5469 阅读 · 1 评论 -
如何确定一个类型是无符号类型
#define IsUnsignedType(type) =原创 2014-11-05 23:15:45 · 1034 阅读 · 0 评论 -
如何确定一个数是无符号数
#define IS原创 2014-11-05 23:11:21 · 749 阅读 · 0 评论 -
strdup
头文件:#include 定义函数:char * strdup(const char *s);使用man来看一下: The strdup() function returns a pointer to a new string which is a duplicate of the string s. Memory for the new string i原创 2015-03-15 10:03:10 · 1154 阅读 · 0 评论 -
为什么基类的析构函数是虚函数?
注:本文章内容大部分来自网站整理。1.为什么基类的析构函数是虚函数? 在实现多态时,当用基类操作派生类,在析构时防止只析构基类而不析构派生类的状况发生。 下面转自网络:源地址 http://blog.sina.com.cn/s/blog_7c773cc50100y9hz.html a.第一段代码 #includeusing namesp原创 2015-03-25 19:12:10 · 597 阅读 · 0 评论 -
vector,map,list,queue区别--总结的不错
1。vector (连续的空间存储,可以使用[]操作符)快速的访问随机的元素,快速的在末尾插入元素,但是在序列中间岁间的插入,删除元素要慢,而且如果一开始分配的空间不够的话,有一个重新分配更大空间,然后拷贝的性能开销.2。deque (小片的连续,小片间用链表相连,实际上内部有一个map的指针,因为知道类型,所以还是可以使用[],只是速度没有vector快)快速的访问随机的元素,快速的在转载 2015-03-16 13:33:38 · 998 阅读 · 0 评论 -
条件变量&互斥锁的使用
线程间的同步技术,主要以互斥锁和条件变量为主. 这是为了避免多线程调度,对数据的修改产生不同步,从而导致条件变量失效的情况。 void *threadone(void *arg) { pthread_mutex_lock(&qlock); while(a<b) { pthread_co原创 2015-03-16 12:17:51 · 592 阅读 · 0 评论 -
c++中的模版和多态之间的关系
表面上看:模板与多态本身就是两个东西。模板实例化是发生在编译期(Compile-time)的,而多态中的函数调用决议是发生在运行时(Run-time)。实际上:模板是静多态,模板是在编译时确定的,而平时我们说的多态是动多态,是在运行时确定。也就是多态分为两种:静多态和动多态。原创 2015-03-16 23:24:29 · 1705 阅读 · 0 评论 -
类的const和非const成员函数的重载
转自:http://blog.csdn.net/anjy/article/details/1819126我们从一个例子说起,来看上一篇文章中的String类, 我们为它提供一个下标操作符([ ])以读写指定位置的字符(char)。只要了解过C++的操作符重载的语法,很快就可以写出下面这个[]操作符重载函数:char& operator[](int posion) //转载 2015-03-28 08:49:37 · 609 阅读 · 0 评论 -
通过socket发送结构体
c/c++通过socket发送结构可以直接先将结构转化到内存中,再通过send直接发送。 在网络通讯过程中往往涉及一些有关联的参数传递,例如数组,结构体之类的。对于结构体其实方法挺简单,由于结构体对象在内存中分配的空间都是连续的,所以可以将整个结构体直接转化成字符串发送,到了接收方再将这个字符串还原成结构体就大功告成了。 首先,我们建立一个结构体。 struct UsrDa原创 2015-03-17 23:27:08 · 1348 阅读 · 0 评论 -
分布式数据包抓取系统
#include #include #include #include #include #include #include #include #include #include #include#include#includeusing namespace std;//////////////////////////////////////////////////原创 2015-03-21 22:23:01 · 840 阅读 · 0 评论 -
cannot find -lpthread以及conflicts with new declaration with ‘C’ linkage
cannot find -lpthread:正常情况下,libthread.so库是存在的。然后类似的其他工程也都有编译过了。找了很久发现是在windows下复制过来的makefile带有^M结尾的字符。删掉就好了。conflicts with new declaration with ‘C’ linkage:这种是在使用G++编译C代码的时候,不同的头文件包含了对同一个函数的声明原创 2015-03-21 15:21:53 · 1490 阅读 · 0 评论 -
Linux下组播&广播消息小例子
组播:// 发送端#include #include #include #include #include #include #include #include #include using namespace std;int main(){ setvbuf(stdout, NULL, _IONBF, 0); fflush(stdout); int原创 2015-03-18 00:09:28 · 739 阅读 · 0 评论 -
不同平台编译选项出现的位置不同
Ubuntu:g++ -o spider bloomfilter.o confparser.o crc32.o dso.o hashs.o md5.o qstring.o sha1.o socket.o spider.o threads.o url.o -rdynamic -lpthread -levent -lcrypt -ldlcenos:g++ -o spider -rdyn原创 2015-03-12 12:41:22 · 615 阅读 · 1 评论 -
linux上localtime函数返回的指针
最近在做一个spider,封装的log宏如下:#define SPIDER_LOG(level, format, ...) do{ \ if(level >= g_conf->log_level) {\ time_t now = time(NULL); \ char msg[MAX_MESG_LEN]; \ char buf[32]; \ sprintf(msg, for原创 2015-03-14 09:17:35 · 1522 阅读 · 0 评论 -
修饰模式
GOOD:当你向旧的类中添加新代码时,一般是为了添加核心职责或主要行为。而当需 要加入的仅仅是一些特定情况下才会执行的特定的功能时(简单点就是不是核心应用的功能) ,就会增加类的复杂度。装饰模式就是把要添加的附加功能分别放在单独的类中,并让这个类包含它要装饰的对象,当需要执行时,客户端就可以有选择地、按顺序地使用装饰功能包装对象。 #include #include using n原创 2015-03-31 10:39:49 · 701 阅读 · 0 评论 -
重载操作符
根据网上的帖子,整理如下:1 并不是所有的操作符都能被重载。除了. ,.* ,:: ,? : ,sizeof,typeid这几个运算符不能被重载,其他运算符都能被重载2 重载不能改变该运算符用于内置类型时的函义,程序员不能改变运算符+用于两个int型时的含义。3 运算符函数的参数至少有一个必须是类的对象或者类的对象的引用。这种规定可以防止程序员运用运算符改变内置类型的函义。4 重载不能改原创 2015-03-24 08:01:20 · 452 阅读 · 0 评论 -
一个简单的排序,练练手
#include <stdlib.h>#include <iostream> #include <list>#include <utility>using namespace std;typedef struct sortExInfo_{ int HuaSeNum; int remainNum;}sortExInfo;typedef pair<int, sortExInf原创 2015-06-19 01:27:18 · 629 阅读 · 0 评论 -
第5个驱动-tq2440
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include static struct class *forthdrv_class;static stru原创 2014-08-17 09:31:07 · 714 阅读 · 0 评论 -
c语言实现面向对象编程
介简: Redy的开发语言是C,但在源码中,有很多地方都使用到了面向对象编程的方法,例如:在基本数据类型这一个模块,所有的数据类型都继承robject;在抽象语法树模块,所有的节点都继承astobjct。在linux内核中,也有很多是使用的面向对象方法,在虚拟文件系统,驱动模型中都可以看到。c语言是一种结构化编程语言,以模块工能和处理过程设计为主,实现数据与代码分隔转载 2014-05-24 00:09:46 · 712 阅读 · 0 评论 -
状态机
在c语言编程中,有面向对象编程的思想也是很重要的。在涉及到条件判断,预编译选项,等等,其实就是一个状态机的实体。在编写程序中,我觉得思想逻辑要脱离语言的限制。先别去想具体的实现,而是思考逻辑上的实现,然后在选择相应的工具去实现。原创 2012-09-30 09:54:32 · 497 阅读 · 0 评论 -
将make 输出重定向到文件
make 结果重定向到文件,直接使用make>file是不行。 I/O重定向通常与 FD有关,shell的FD通常为10个,即 0~9; 常用FD有3个,为0(stdin,标准输入)、1(stdout,标准输出)、2(stderr,标准错误输出),默认与keyboard、monitor有关;而是make > makeresult 2> &1上面的意思是将错误输入原创 2012-09-25 21:13:01 · 2881 阅读 · 0 评论 -
浅谈契约式编程
浅谈契约式编程2010-09-03契约式编程是编程的一种方法。那么什么是契约式编程呢?我想这个概念是从“合同”演变过来的。在人类的社会活动中,契约一般是用于两方,一方(供应者)为另一方(客户)完成一些任务。每一方都期待从契约中获得利益,同时也要接受一些义务。通常,一方视为义务的对另一方来说是权利。契约文档要清楚地写明双方的权利与义务。契约合同能保障双方的利益,对转载 2013-12-02 09:11:18 · 826 阅读 · 0 评论 -
assert()函数用法总结
assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include assert.h>void assert( int expression ); assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。请看下面的程序清单bad转载 2013-12-02 09:12:40 · 591 阅读 · 0 评论 -
特权级0的代码到特权级3代码的转移之IRET指令
由 于处于特权级0的代码不能直接把控制权转移到特权级3的代码中执行,但中断返回操作是可以的,因此当初始化GDT、IDT和定时芯片结束后,我们就利用中 断返回指令IRET来启动第1个任务。具体实现方法是在初始堆栈init_stack中人工设置一个返回环境,即把任务0的TSS段选择符加载到任务寄存 器LTR中、LDT段选择符加载到LDTR中以后,把任务0的用户栈指针(0x17:init_stack)和原创 2013-12-31 22:11:13 · 2086 阅读 · 0 评论 -
浅谈 Python 程序和 C 程序的整合
越来越喜欢python了,真是tmd方便简洁,python把方便简洁做到极致,C把效率做到极致,两者结合,理论上可以说是天下无敌了。堪称完美。以下文章为转载:http://www.ibm.com/developerworks/cn/linux/l-cn-pythonandc/转自:概览Python 是一种用于快速开发软件的编程转载 2014-01-10 12:50:22 · 820 阅读 · 0 评论 -
c/c++ 调用lua
http://blog.csdn.net/codebob/article/details/17842129我们先随便写一个lua脚本[java] view plaincopyprint?--加法 function add(x,y) return y+x end 然后我们在c、c++面这样调用转载 2014-01-10 12:58:51 · 581 阅读 · 0 评论 -
LINUX下printf输出字体的特效
在学习LINUX网络编程的时候我们做了一个聊天系统,当时为了界面更漂亮点,于是在百度上搜索了下关于printf()函数的用法,和大家分享下: 给printf的输出加上些特效比如颜色,可以让打印信息更鲜明,在debug的时候特别有用。 颜色: #d转载 2014-02-17 12:29:09 · 774 阅读 · 0 评论 -
setjmp和longjmp函数使用详解
非局部跳转语句---setjmp和longjmp函数。非局部指的是,这不是由普通C语言goto,语句在一个函数内实施的跳转,而是在栈上跳过若干调用帧,返回到当前函数调用路径上的某一个函数中。#include Int setjmp(jmp_buf env); 返回值:若直接调用则返回0,若从longjmp调用返回则返回非0值的longjmp中的val值Void long转载 2014-03-06 22:53:19 · 607 阅读 · 0 评论 -
简单的递归
理解递归第概念,关键在于对堆栈的理解。原创 2014-05-10 21:54:35 · 682 阅读 · 0 评论 -
x & (x - 1)==0
判断一个整数x是否是2的N次方。 方法之一是判断x & (x - 1)==0。若为True,则x是2的N次方;若为False,则x不是2的N次方。 有人质疑,他证明了“2的n次方一定符合这个条件”, 却并没有证明“符合这个条件的一定是2的n次方”呀!更没有证明“不符合条件的一定不是2的n次方”呀。 现在,从两个方面来证明这个方法的正确性 证明之前转载 2014-05-12 23:35:17 · 1065 阅读 · 0 评论 -
内联函数和宏的差别是什么?
1 内联函数和普通函数相比可以加快程序运行速度,因为不需要中断调用,在编译时内联函数可以直接被镶嵌到目标代码中。而宏只是一个简单的替换。宏不是函数,而inline函数是函数。2 内联函数要做参数类型检查,而宏只是简单的替换。原创 2014-05-13 01:08:43 · 637 阅读 · 0 评论 -
int b ,(!!b)相当于什么?
int b ,(!!b)相当于什么?咋一看,有点闷了!原创 2014-05-12 23:47:08 · 1323 阅读 · 0 评论 -
函数调用注意声明原型
When you compile your program that uses a dynamic library, object files are left with references to the library functions just as for any other external reference.You need to include the header for原创 2014-06-03 21:23:28 · 1515 阅读 · 0 评论 -
C语言面向对象编程
经常看到关于OO编程的讨论,C++, Java, C#...还有最近很流行的动态语言Python,Ruby等,但很少看到有C的份。在我看来,OO编程的核心是OO的思想,用什么语言倒是其次。但是,不可否认,那些专门为OO编程设计的语言可以比较方便和自然地表达OO思想,有些语言甚至强制使用OO特性。 C,作为最贴近底层的高级语言,拥有简洁的语法和直接内存操作能力(指针),大量运用于系统级编程,转载 2014-05-24 00:05:52 · 716 阅读 · 0 评论 -
C语言 实现 面向对象编程 OOC
最近百度面试过程中有同学被问到这样一个问题:如何用C语言实现面向对象?我们都知道面向对象的三大基本特征:封装、继承和多态,C++语言和编译器都对这些特征有着强有力的支持,但是对于C这样的函数式语言,如何实现面向对象?引用一句话:面向对象从来都是思想,而不是语言! 理解面向对象的编程思想,我们使用C语言这样的较低级的语言也同样可以实现OOP,里面具体用到的有C语言中的宏,结构体,函数指针, 聚合转载 2014-05-24 00:07:58 · 1109 阅读 · 1 评论 -
轻量级的C语言面向对象编程框架
轻量级的C语言面向对象编程框架转载 2014-05-24 00:13:13 · 1343 阅读 · 1 评论 -
C++中delete和delete[]的区别
转自http://jazka.blog.51cto.com/809003/230220 一直对C++中的delete和delete[]的区别不甚了解,今天遇到了,上网查了一下,得出了结论。做个备份,以免丢失。 C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]转载 2015-08-22 09:29:20 · 741 阅读 · 0 评论