C/C++
Amao_come_on
这个作者很懒,什么都没留下…
展开
-
C语言的设计模式-接口隔离
接口隔离:定义为客户端不应该依赖它不需用的接口,在C语言中我们可以把头文件看成一个模块的接口,根据接口隔离原则也就是说这个头文件中只能包含外部需要的接口,但在实际的项目中往往头文件都不符合接口隔离原则。1:内、外部接口的隔离:头文件中通常包含了模块内部接口(内部类型定义、内部接口声明)和外部接口(外部接口声明)假设moudle模块对外提供一个fun1接口,模块内部实现需要定义一个结构类转载 2015-07-12 16:22:58 · 897 阅读 · 0 评论 -
解决头文件相互包含问题的方法----超前引用
所谓超前引用是指一个类型在定义之前就被用来定义变量和声明函数。 一般情况下,C/C++要求所有的类型必须在使用前被定义,但是在一些特殊情况下,这种要求无法满足,例如,在类CMyView中保留了一个非模式对话框对象指针,该对象用于显示/修改一些信息。为了实现对话框"应用"按钮,把对话框做的修改立刻更新到view界面上,为此,需要在对话框类中需要保存view类的指针,这样定义关系转载 2015-07-12 16:18:01 · 757 阅读 · 0 评论 -
enum类型变量的使用和赋值
enum是枚举型union是共用体,成员共用一个变量缓冲区现在基本已经不用了。枚举类型在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等。如果把这些量说明为整型,字符型或其它类型显然是不妥当的。为此,C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值,被说明为该“枚举”类型的变量取值不能转载 2015-06-23 16:01:00 · 75771 阅读 · 0 评论 -
小览call stack(调用栈) (一)
栈在计算机领域中是个经常提到的名词,数据结构中有栈;网络传输中有协议栈。今天我们讨论的调用栈(call stack),指的是在程序的执行过程中存储函数调用信息的动态数据结构。 这个定义可能太抽象了一些,在给出具体的例子之前,请大家先思考一个问题,哪些信息是函数调用过程中所需要的?或者这么问,一个编译器,在面对一个函数的调用指令时,该生成哪些代码? 首先,函数的返回地址要保存下来。就转载 2015-04-19 21:28:31 · 586 阅读 · 0 评论 -
回调函数和发消息的作用比较
一回调函数我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理、用回调函数记录某操作进度等)变得非常方便和符合逻辑,那么它的内在机制如何呢,怎么定义呢?它和其它函数(比如钩子函数)有何不同呢?使用回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数。而 那个函数在需要的时候,利用传递转载 2015-01-10 16:42:34 · 2663 阅读 · 0 评论 -
C语言中的main函数参数及返回值
我们经常看到main函数不带参数。因此main后都是空括号。C代码 main() { ... } 实际上,main函数必须带参数,这个参数可以认为是main函数的形式参数。C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv。因此,main函数的函数头可写为:C代码 main (a转载 2014-10-21 20:20:07 · 930 阅读 · 0 评论 -
函数返回值
不带返回值的 return 语句只能用于返回类型为 void 的函数。在返回类型为 void 的函数中,return 返回语句不是必需的,隐式的 return 发生在函数的最后一个语句完成时。一般情况下,返回类型是 void 的函数使用 return 语句是为了引起函数的强制结束,这种 return 的用法类似于循环结构中的 break 语句的作用。例如,可如下重写 swap 程序,使之在转载 2014-10-22 12:47:49 · 561 阅读 · 0 评论 -
关于函数返回值的几种情况
在一个函数的内部,return的时候返回的都是一个拷贝,不管是变量、对象还是指针都是返回拷贝,但是这个拷贝是浅拷贝。 1. 如果返回一个基本类型的变量,比如:int a;a = 5;return a; 那么就会a的一个拷贝,即5返回,然后a就被销毁了。尽管a被销毁了,但它的副本5还是成功地返回了,所以这样做没有问题。转载 2014-10-22 12:55:05 · 612 阅读 · 0 评论 -
C/C++ 函数调用与函数返回值
函数参数与函数调用 1、函数调用的作用: ·用实参数向形式参数传递数据; ·为获得数据参数及在函数体中声明的变量分配存储空间; ·中断现行(调用)函数,把流程向被调用函数的入口处,开始执行被调函数。 当参数表为空时,表示该函数不从调用函数接受数据。 2、数值参数 传值调用:形参只有在函数被调用时,才被分配内存区域,并一直保留到函数返回时被撤销转载 2014-10-22 11:29:52 · 1539 阅读 · 0 评论 -
C++中const关键词总结
下午在调程序时,遇到 error: passing ‘$class_name‘ as ‘this’ argument of ‘$class_function‘ discards qualifiers的编译的错误,错误的意思是 this指针在作为参数传入class_function时限定符被取消了google一下,是这个函数需要用const修饰,而我漏了,因而报了这个编译错误。转载 2014-10-16 20:25:52 · 451 阅读 · 0 评论 -
const成员函数
const成员函数看到const 关键字,C++程序员首先想到的可能是const 常量。这可不是良好的条件反射。如果只知道用const 定义常量,那么相当于把火药仅用于制作鞭炮。const 更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。const 是constant的缩写,“恒定不变”的意思。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮转载 2014-10-15 13:43:47 · 444 阅读 · 0 评论 -
防御式编程
在软件开发过程中,不可避免的会遇到错误处理,而且这部分对于整个软件的健壮性有非常大的作用,它是软件除了功能性以外最重要的指标了,一个软件成功与否与其健壮性有很大的联系。我在以前的开发中也时常思考错误处理,因为这部分代码逻辑比较不容易梳理清楚。以异常的处理为例,以前通常就采用比较简单粗暴的处理方式:用try..catch加Exception把所有异常都包起来,这样简单省事,写的代码最少,相信很多童鞋转载 2014-10-15 19:30:07 · 510 阅读 · 0 评论 -
程序基础C语言常量(const)参数
函数 - 常量(const)参数 非指针参数(也就是传值参数)不会被修改原始值, const 对它是没有意义的。 const 只用于指针。 1. 第一种用法: const 类型 *变量: 这种用法将限制修改指针指向的值。 #include int fun(const int *p) { *p += 1;转载 2014-10-13 21:34:22 · 1719 阅读 · 0 评论 -
编程高手之路-- C 与C语言的区别(上)
http://www.360doc.com/content/11/0426/21/6580811_112554151.shtml转载 2014-11-16 20:38:45 · 610 阅读 · 0 评论 -
队列之顺序队列与循环队列
一、队列的概念 只能在表的一端进行插入操作,只能在表的另一端进行删除操作,这种数据结构称为队列。把允许插入的一端叫队尾(rear),允许删除的一端叫对头(front)。二、队列的分类 队列本身也是一种线性表,因而和线性表一样也有顺序和链式存储结构两种存储方式。 采用顺序存储结构实现的队列称为顺序队列; 采用链式存储转载 2014-11-13 13:26:26 · 819 阅读 · 0 评论 -
(原创)攻击方式学习之(3) - 缓冲区溢出(Buffer Overflow)
http://www.cnblogs.com/coderzh/archive/2008/09/06/1285693.html转载 2014-11-09 10:21:04 · 492 阅读 · 0 评论 -
有或无操作系统的Linux设备驱动区别
一、驱动的作用 任何一个计算机系统的运行都是系统中软硬件协作的结果,没有硬件的软件是空中楼阁,而没有软件的硬件则只是一堆废铁。硬件是底层基础,是所有软件得以运行的平台,代码最终会落实为硬件上的组合逻辑与时序逻辑;软件则实现了具体应用,它按照各种不同的业务需求而设计,满足了用户的需求。硬件较固定,软件则很灵活,可以适应各种复杂多变的应用。可以说,计算机系统的软硬件互相成就了对方。转载 2015-08-24 19:19:05 · 1823 阅读 · 0 评论 -
extern可以声明一个变量而不定义它,extern可以声明一个类吗?
http://bbs.csdn.net/topics/300114318转载 2015-08-02 23:29:21 · 1771 阅读 · 0 评论 -
C语言函数调用的底层机制
这是一篇介绍C语言中的函数调用是如何用实现的文章。写给那些对C语言各种行为的底层实现感兴趣人的入门级文章。如果你是C语言或者汇编、底层技术的老鸟或是对这个问题不感兴趣,那么这篇文章只会耽误您的时间,您大可不必阅读他。当然如果前辈们愿意为我指出不足,我将十分感谢您的指导,并对耽误您宝贵的时间致歉。好了,废话少说!要研究这个问题,让我们先打开VC++吧。最好是6.0的,:-P。(什么你没有转载 2017-03-12 20:12:58 · 3254 阅读 · 0 评论 -
小心整数比较中的符号属性
Title:小心整数比较中的符号属性 如果没有红色的强制转换,当最高bit为1时,结果是完全不一样的。 long lFileLen = _filelength(fileno(m_aLogFile[LOG_LIST_FILE ].pFile)); if((DWORD)lFileLen >= MAX_FILE_LENGTH) { return转载 2015-12-04 22:00:32 · 380 阅读 · 0 评论 -
【C语言学习】封装和模块化思想
【C语言学习】封装和模块化思想2014-7-6阅读1162 评论2刚学习完C后,做的关于C的课程设计是在一个源文件中放了几百行代码,而且各个功能之间都是相互依赖的,这样就会很麻烦。因为当我要修改某个地方的时候,就会牵连着要修改喝多的地方。而在实际的程序设计中,这也是不可取的。因此,模块化和封装的思想就显得很重要了!!!★static变量static变量的一个显著的作转载 2015-12-04 22:18:36 · 2218 阅读 · 0 评论 -
linux中结构体成员变量加“点”问题
最近在看Linux内核设计与实现这本书,对于结构体初始化方式比较好奇,以前用C写单片机接触的比较少;百度后看到如下解释: 在阅读GNU/Linux内核代码时,我们会遇到一种特殊的结构初 最近在看Linux内核设计与实现这本书,对于结构体初始化方式比较好奇,以前用C写单片机接触的比较少;百度后看到如下解释:在阅读GNU/Linux内核代码时,我们会遇到一种特殊转载 2015-12-20 23:05:51 · 3700 阅读 · 0 评论 -
c++编程必备啊..
c++编程必备啊..C/C++是最主要的编程语言。这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码。这份清单提供了源代码的链接以及它们的小说明。我已尽力包括最佳的C/C++源代码的网站。这不是一个完整的清单,您有建议可以联系我,我将欢迎您的建议,以进一步加强这方面的清单。 1、http://snippets.dzone.com/tag/c/ --数以千计的有用的C转载 2015-12-02 12:48:08 · 533 阅读 · 0 评论 -
数组形参
数组有两个特殊的性质。一是不能复制数组;二是使用数组名字时,数组会自动转化为指向其第一个元素的指针。由于数组不能复制,所以无法编写使用数组类型形参的函数,因为数组会被自动转化为指针。 数组形参是个容易出问题的地方。因为对于C/C++新手而言,最大的惊讶是C++中根本不存在所谓的“数组形参”,因为数组在传入时,实质上只传入指向其首元素的指针。1 void average(in转载 2016-01-18 19:10:57 · 1966 阅读 · 0 评论 -
如何使用数组参数
如果一个函数以一维数组为参数,我们可以这样声明这个函数void func(int* a) ;void func(int a[]) ;void func(int a[3]) ;实际上,这三种形式是等价的,在使用数组做参数时,编译器会自动将数组名转换为指向数组第一个元素的指针,为什么呢?这要从参数的传递方式说起,参数有三种传递方式,按值传递,按指针传递,按引用传递,分别如下void T转载 2016-01-18 19:08:12 · 665 阅读 · 0 评论 -
C语言错误处理策略
今天写程序时,发现自己平时不爱做异常处理。(C语言的异常处理比起java的来总觉得好费劲啊~) 上网google了一下看见了一位大牛的解释,好厉害,膜拜一下 1. 返回值方式:用函数的返回值标志函数是否执行成功。比如成功返回1,失败返回0。这种方式的好处是简单方便,而且不影响效率,保持了c语言的高效率。但是仍然有问题,一个问题是代码可读性的问题,如果每个函数都有这样的返转载 2015-11-20 16:27:45 · 1341 阅读 · 0 评论 -
C语言中的回调
ResourceFrom:http://lemote.blog.163.com/blog/static/1748395072013111631216547/软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执 行完毕才返回,它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用转载 2015-11-19 23:04:10 · 453 阅读 · 0 评论 -
C语言----for语句,break和continue的应用与区别
C语言----for语句,break和continue的应用与区别 (2012-06-12 16:32:28)转载▼1。问题2。for语句3。break和continue的应用与区别 1。问题; 上章博文的问题点,主要是看B的变量变化情况。这里就不在说明; 2。for语句 格式: f转载 2015-11-19 23:01:23 · 1274 阅读 · 0 评论 -
C语言程序员必读的5本书
本文由 伯乐在线 - programmer_lin 翻译。未经许可,禁止转载!英文出处:fromdev。欢迎加入翻译组。你正计划着通过看书来学习C语言吗?“书籍是人类最忠诚的朋友“。海明威一定知道书籍对一个人一生的重要性。书籍是知识的丰富来源。你可以从书中学到各种知识。书籍可以毫无歧视地向读者传达作者的本意。C语言是由 Dennis Ritchie在1969年到1973年在贝尔实验室研转载 2015-11-20 16:22:10 · 11296 阅读 · 0 评论 -
低级程序员和高级程序员的区别
低级程序员认为自己与高级程序员的区别, 主要是高级程序员任何功能都能编码实现, 编码速度快, 代码无 bug. 正如一惯的那样, 低级程序员之所以低级, 正是因为他们勉强能看到(或者根本看不到)事物的表象而看不到本质. 所以, 低级程序员总结出的一切东西, 你都可以大胆的忽略.所以, 我们来听听高级程序认为自己与低级程序员的区别是什么. 高级程序员之所以高级, 在于他们认识到代码 bug转载 2015-11-20 12:20:07 · 3962 阅读 · 0 评论 -
C语言中的回调
软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。回调和异步转载 2015-11-19 15:31:28 · 3933 阅读 · 0 评论 -
10个足以让你成为更优秀的程序员的C语言资源
一些人觉得编程无聊,一些人觉得它很好玩。但每个程序员都必须紧跟编程语言的潮流。大多数程序员都是从C开始学习编程的,因为C是用来写操作系统、应用程序最常用的语言。C编程笔记这些是华盛顿实验学院C编程入门课的部分笔记。它们是以《C程序设计语言》的补充笔记(从1995年春开始)为基础修改的,而这本书的作者就是大名鼎鼎的Brian Kernighan和Dennis Ritchie了,人们亲转载 2015-11-20 19:18:08 · 1101 阅读 · 0 评论 -
*.h文件头部常用 #ifndef _STDIO_H_,#if __cplusplus
头件的中的#ifndef,这是一个很关键的东西。比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。 还是把头文件的内容都放在#ifndef和#endif中吧。不管你的头文件会不会被多个文件引用,你都要加上这个。一般格式是这样的:#ifndef #define ....转载 2015-11-14 18:15:52 · 1251 阅读 · 0 评论 -
C语言宏中"#"和"##"的用法
C语言宏中"#"和"##"的用法 在查看linux内核源码的过程中,遇到了许多宏,这里面有许多都涉及到"#"和"##",因此,在网上搜索了一些资料,整理如下: 一、一般用法 我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起. 用法: #include#includeusing namespace std; #define STR(s)转载 2015-08-03 00:06:45 · 3860 阅读 · 0 评论 -
中断服务函数的编写要求
中断是嵌入式系统中重要的组成部分,但是在标准C中不包含中断。许多编译开发商在标准C上增加了对中断的支持,提供新的关键字用于标示中断服务程序 (ISR),类似于__interrupt、#program interrupt等。当一个函数被定义为ISR的时候,编译器会自动为该函数增加中断服务程序所需要的中断现场入栈和出栈代码。 中断服务程序需要满足如下要求: (1)不能返回值; (2)转载 2014-10-22 10:58:16 · 6878 阅读 · 0 评论 -
教你理解复杂的C/C++声明
介绍曾经碰到过让你迷惑不解、类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗?本文将由易到难,一步一步教会你如何理解这种复杂的C/C++声明:我们将从每天都能碰到的较简单的声明入手,然后逐步加入const修饰符和typedef,还有函数指针,最后介绍一个能够让你准确地理解任何C/C++声明的“右左法则”。需要强调一下的是,复杂的C/C++声明并不是好的编程风格;转载 2014-09-24 19:02:17 · 325 阅读 · 0 评论 -
回调函数的概念及其使用
1 什么是回调 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方转载 2013-04-23 21:00:16 · 391 阅读 · 0 评论 -
专访李民录:主流语言C++入门并不难
摘要:社区之星第7期采访的嘉宾是从事五年遥感图像处理相关算法的李民录。他表示C++在很长一段时间中仍为主流语言,对C++入门难的说法给出了自己的观点和学习方式。此外,他还致力原创GDAL源码剖析系列文章,旨在跟大家分享,秉承独乐乐不如众乐乐之观念。 李民录:学习技术,独乐乐不如众乐乐CSDN:请先介绍下自己学习和工作经历,曾开发过什么产品?之前的工作经验对你现在转载 2013-03-12 08:54:49 · 1302 阅读 · 0 评论 -
内核非连续内存分配(Vmalloc)
伙伴关系也好、slab技术也好,从内存管理理论角度而言目的基本是一致的,它们都是为了防止“分片”,不过分片又分为外部分片和内部分片之说,所谓内部分片是说系统为了满足一小段内存区(连续)的需要,不得不分配了一大区域连续内存给它,从而造成了空间浪费;外部分片是指系统虽有足够的内存,但却是分散的碎片,无法满足对大块“ 连续内存”的需求。无论何种分片都是系统有效利用内存的障碍。slab分配器使得一个页面内转载 2013-07-02 17:16:59 · 1143 阅读 · 0 评论 -
Linux之#pragma的用法
http://www.linuxidc.com/Linux/2012-06/61901.htm转载 2013-06-28 14:53:51 · 587 阅读 · 0 评论