c/c++基础
无风也流
1 最早从事atmel单片机开发,目前从事arm linux开发(安防行业)。
2 开发过的产品。有些产品的具体型号记不清楚了。
a 染整机器,atmel。
b baby monitor(2.4g婴儿监控),stm。
c 智能电表(microchip)+电力集中器(arm atmel + linux)。
d 行车记录仪(lpc1778 + ucos)。
e DVR/NVR + 智能门铃/扫地机/无人机等(安防,hisi/gm/goke芯片)。
3 硬件同事合作接单的产品
a stm32f103rc 一拖八充电器。
b stm32f407vg 跑步机采集+网络传输到PC控制平台(stm端使用嵌入式tcp/ip协议 lwip)。
c 安防类的视频流传输(rtsp/rtp/rtcp)等。
d 未完待续。
展开
-
#define
以下的代码在C++中用T就很容易解决了,但在c中只能繁琐地每条展开,幸好我们还有#define#define NETCGI_MSG_SET_NVR(msgtype,msgcgi) {\ msgcgi *pmsgcgi = (msgcgi *)input_param;\ if(NULL == pmsgcgi)\ {\ nRetCode = NET_CGI_INVALID_PAR原创 2013-12-15 10:34:52 · 903 阅读 · 0 评论 -
Delegate
2014-06-29 星期日 19:36:45 委托简单点说,就是委托者把其要委托的功能以pfunc的形式传递给受托者,由受托者来调用pfunc。代码来自网络,稍加修改。1234567891011121314151617原创 2014-06-30 21:21:34 · 549 阅读 · 0 评论 -
sig/slot
2014-06-28 星期六 18:44:51 开源的有libsigc++,简单代码123456789101112131415161718192021222原创 2014-06-30 21:23:54 · 681 阅读 · 0 评论 -
C++中如何在main()函数之前执行操作?
多玩YY语音的面试题:C++中如何在main()函数之前执行操作? 第一反应main()函数是所有函数执行的开始。但是问题是main()函数执行之前如何执行呢? 联想到MFC里面的 C**App类的theApp对象,其执行顺序就在main函数之前。道理相通,顺理推下,能够想到:如果在main函数之前声明一个类的全局的对象。那么其执行顺序,根据转载 2014-06-19 21:43:41 · 6891 阅读 · 0 评论 -
c版本观察者模式
2014-08-23 星期六 20:55:28见代码123456789101112131415161718192021222324252627原创 2014-08-23 20:55:49 · 786 阅读 · 0 评论 -
模板函数 重载/特化
见代码12345678910111213141516171819202122232425262728293031原创 2014-08-23 20:35:11 · 830 阅读 · 0 评论 -
traits
2014-08-24 星期日 20:47:29traits简而言之就是型别+偏特化先给出只有型别的12345678910111213141516171819202122原创 2014-08-24 20:46:43 · 570 阅读 · 0 评论 -
Command设计模式3
2014-11-18 星期一 20:44:45 接下来对struct TestFunctor的泛化,主要是对返回值的返回。分void和非void1、TestFunctorImpl123456789101112131415原创 2014-11-18 20:57:14 · 623 阅读 · 0 评论 -
effective C++ 3th 备忘1
2014-11-21 星期五 22:00:15 1、copy构造/copy赋值copy构造函数被用来"以同型对象初始化自我对象", copy assignment操作符被用来"从另一个同型对象中拷贝其值到自我对象"1234567891011cl原创 2014-12-18 18:21:17 · 645 阅读 · 0 评论 -
effective C++ 3th 备忘2
6、条款09: 绝不在构造和析构过程申调用virtual函数base class 构造期间virtual 函数绝不会下降到derived classes阶层。取而代之的是,对象的作为就像隶属base类型一样。非正式的说法或许比较传神:在baseclass构造期间,virtual函数不是virtual函数。由于base class 构造函数的执行更早于derived cl原创 2015-01-22 22:54:43 · 511 阅读 · 0 评论 -
effective C++ 3th 备忘3
11、条款20:宁以pass-by-reference-to-const 替换pass-by-valuepass-by-value会带来构造/析构的开销。此时形参是实参的副本。passbyreference-to-const没有任何构造函数或析构函数被调用,因为没有任何新对象被创建。by reference方式传递参数也可原创 2015-01-22 23:00:48 · 589 阅读 · 0 评论 -
jmp_buf的使用,结构定义为数组
转自:jmp_buf的使用,结构定义为数组今天看《C专家编程》第7章第8节,最后提到用setjmp/longjmp从信号终恢复。顺便敲了代码看看效果,就对其中jmp_buf这个结构感兴趣。查看一下,发现/usr/include/setjmp.h中是这么定义的: 图1 另外__jmp_buf的定义在/usr/include/i386-linux-gnu/bits/setjm转载 2016-03-06 10:36:17 · 9986 阅读 · 1 评论 -
拷贝构造函数
#include #include #include #include #include #include #include using namespace std;class CExample{private:public:int a;static int count;char* str;public原创 2013-12-07 20:01:42 · 692 阅读 · 0 评论 -
有点意思的C/C++问题及解答:16-20
有点意思的C/C++问题及解答:16-20问题16:在C++中定一个不能被继承的类 解法:容易想到的就是将这个类的构造函数和析构函数都设为私有的。这样继承的类就无法调用父类的构造函数和析构函数,编译时就会报错。但是不能被继承的类如何产生对象呢?可以利用静态函数,它与类的对象无关,可以直接通过类的作用域直接调用。[cpp] view pla转载 2014-03-25 22:11:48 · 558 阅读 · 0 评论 -
回调总结
在网上也看了不少相关的资料,总觉得少了些什么,于是自己动手,看能不能结合自己的经验,通俗易懂地描绘下。不对和不足之处请大家共同纠正。一、函数调用类型 假定有2个模块,A和B。 1、同步调用 这个最基础了,就是a.func直接调用b.func。没什么好说的。 2、同步回调(采纳很多网友的说法,主要是为了有别于异步回调原创 2013-12-26 18:57:16 · 847 阅读 · 0 评论 -
struct赋值时带成员名称
代码如下,这样看起来比较一目了然。typedef struct tagHW_PRODUCT{ int Product; int Lvch; int Pbch; int Audioch; int Alarmch; int Enc3di; int Dec3di; int Subcap; } HW_PRODUCT;HW_PRODUCT hw_p原创 2014-02-22 14:11:14 · 795 阅读 · 0 评论 -
dynamic_cast & static_cast
代码如下:#include #include #include #include #include #include #include #include //不久就在工作中碰到了一个活生生的例子/*#if 0 //不能一步到位,error: expected unqualified-id before '(' token //可能表达式过于复杂了,原创 2014-02-22 21:40:37 · 1219 阅读 · 0 评论 -
结构体互相指向
结构体互相指向,一般有以下应用场景。最主要的是不要误认为结构体互相指向是"箱中箱"(网上真有这样认知的)。1、相互回溯,一一对应关系struct A 和 struct B逻辑关系式一一对应。典型的如page和button,main menu和sub menu。● page 和 button#define MAX_BUTTON_NUM 8struct _guipa原创 2014-03-09 17:25:19 · 892 阅读 · 0 评论 -
void * 指针算术运算【-Wpointer-arith】
void * 指针算术运算【-Wpointer-arith】#ifdef __cplusplusextern "C"{#endif #include #include int main(int argc,char* argv[]){ printf("argc(%d)\n",argc); int n = 0; for(n=0;n<argc;++n)原创 2014-03-09 09:55:08 · 7074 阅读 · 0 评论 -
零长数组
GCC 中允许使用零长数组(__GNUC__ >= 3)。零长数组在有固定头部的可变对象上非常适用,我们可以根据对象的大小动态地去分配结构体的大小。gui ftk里经常用的。在分配内存时,零长数组指向变长的PrivInfo。FTK_ZALLOC(sizeof(FtkSource) + sizeof(PrivInfo))#if __GNUC__ >= 3#def原创 2014-03-09 15:58:36 · 788 阅读 · 0 评论 -
c/c++函数指针
2014-03-29 星期六 10:31:48c/c++函数指针demo1、funcptr.hh1234567891011121314151617181920212223原创 2014-03-29 10:42:00 · 793 阅读 · 0 评论 -
有点意思的C/C++问题及解答:1-5
http://blog.csdn.net/wuzhekai1985/article/details/6615056问题1 :写一个交换两个数的宏方法1:可以用异或运算来做,如果是浮点数,这个方法就不行了[cpp] view plaincopyprint?#define _swap(a,b) { a=a^b; b=a转载 2014-03-25 22:02:59 · 532 阅读 · 0 评论 -
有点意思的C/C++问题及解答:11-15
http://blog.csdn.net/wuzhekai1985/article/details/6627888问题11:下面这个函数希望完成什么任务?[cpp] view plaincopyprint?int func(int x) { int countx = 0; while转载 2014-03-25 22:08:42 · 503 阅读 · 0 评论 -
有点意思的C/C++问题及解答:6-10
http://blog.csdn.net/wuzhekai1985/article/details/6628212问题 6:非C++内建型别A 和B,在哪几种情况下B 能隐式转化为A? (1)class A { ...... }; class B : public A { ……} ; // B 公有继承自A,可以是间接继承的(2)class A { ....转载 2014-03-25 22:05:30 · 558 阅读 · 0 评论 -
有点意思的C/C++问题及解答:21-25
有点意思的C/C++问题及解答:21-25问题21:判断C编译器是否支持嵌套注释。 解法:嵌套注释是指在/* */ 中出现/* ... */,定义这个式子: /*/*/0*/**/1 。如果编译器不支持嵌套注释,那么这个式子为0*1。如果支持嵌套注释,那么这个式子为1。摘自《C陷阱与缺陷》。 问题22:判断机器的大小端。 解转载 2014-03-25 22:13:04 · 563 阅读 · 0 评论 -
tailq
2014-08-23 星期六 20:48:58见代码queue.h12345678910111213141516171819202122232425原创 2014-08-23 20:46:25 · 1992 阅读 · 0 评论