语法规则
文章平均质量分 87
Dennis_Wang
这个作者很懒,什么都没留下…
展开
-
C++中this指针的用法
this指针只能在一个类的成员函数中调用,它表示当前对象的地址。下面是一个例子: void Date::setMonth( int mn ) { month = mn; // 这三句是等价的 this->month = mn; (*this).month = mn; } 1. this只能在成员函数中使用。全局函数,静态函数都转载 2013-06-09 13:55:56 · 746 阅读 · 0 评论 -
“asmlinkage” 的作用
什么是 "asmlinkage"?相信大家在看linux的source code的时候,都会注意到asmlinkage这个宏,它是用来做什么的呢?The asmlinkage tag is one other thing that we should observe about this simple function. This is a #define for some g转载 2014-07-25 13:53:37 · 5582 阅读 · 0 评论 -
C语言函数参数传递原理
C语言中参数的传递方式一般存在两种方式:一种是通过栈的形式传递,另一种是通过寄存器的方式传递的。这次,我们只是详细描述一下第一种参数传递方式,另外一种方式在这里不做详细介绍。首先,我们看一下,下面一个简单的调用例程:int Add (int a, int b, int c){return a+b+c;}void main(){int x =0 , y = 1原创 2014-07-29 10:34:19 · 3288 阅读 · 0 评论 -
C语言的预处理问题
C语言的宏定义问题原创 2014-07-04 15:45:35 · 1052 阅读 · 0 评论 -
面向对象语言的多态性问题
一直以来在我们所见到的概念中,面向对象语言有三大特性:封装性、继承和多态。封装性:在面向对象的语言中存在有类的概念,因此实现了数据和行为(方法)的封装,在外部表现为统一的类或对象。在类的外部要访问类的公有成员(私有成员通过类或对象也是不能访问的),必须通过类名或对象来访问。继承:类的继承是在现有类的基础之上创建新的类,实现了代码的重用,并且扩展了现有类的功能的机制。关于继承方面,有原创 2014-08-01 09:40:47 · 1583 阅读 · 0 评论 -
size_t
size_t在C语言中就有了。它是一种“整型”类型,里面保存的是一个整数,就像int, long那样。这种整数用来记录一个大小(size)。size_t的全称应该是size type,就是说“一种用来记录大小的数据类型”。通常我们用sizeof(XXX)操作,这个操作所得到的结果就是size_t类型。因为size_t类型的数据其实是保存了一个整数,所以它也可以做加减乘除,也可以转化为i转载 2014-10-09 15:24:54 · 569 阅读 · 0 评论 -
编译警告(Warning)
如何看待编译警告 当编译程序发现程序中某个地方有疑问,可能有问题时就会给出一个警告信息。警告信息可能意味着程序中隐含的大错误,也可能确实没有问题。对于警告的正确处理方式应该是:尽可能地消除之。对于编译程序给出的每个警告都应该仔细分析,看看是否真的有问题。只有那些确实无问题的警告才能放下不管。说明:由于编译的警告各种各样,根本不可以一一罗列出来,下面只是列举出比较典型的一些警告,还有一些转载 2014-10-11 14:37:44 · 3355 阅读 · 0 评论 -
深入探讨this指针
深入探讨this指针 为了写这篇文章,准备了好长时间,翻遍了箱底的书籍。但是现在还是不敢放开手来写,战战兢兢。不是担心自己写错,而是唯恐自己错误误导别人。同时也希望这篇文章能给你一点收获。既然是深入探讨this指针,所以建议初学者,最好具有一定编译基础,调试基础。如果大家认为这片文章有不满的地方,就给我发信批评一下,以便及时修正。关于this指针的描述我们一般从语言层次上讲;thi转载 2014-12-15 11:18:32 · 724 阅读 · 0 评论 -
复制构造函数(拷贝构造函数)
也许很多C++的初学者都知道什么是构造函数,但是对复制构造函数(copy constructor)却还很陌生。对于我来说,在写代码的时候能用得上复制构造函数的机会并不多,不过这并不说明复制构造函数没什么用,其实复制构造函数能解决一些我们常常会忽略的问题。 为了说明复制构造函数作用,我先说说我们在编程时会遇到的一些问题。对于C++中的函数,我们应该很熟悉了,因为平常经常使用;对于类的转载 2015-04-19 17:00:13 · 725 阅读 · 0 评论 -
C语言指针强制类型转换
概要:C语言中,任何一个变量都必须占有一个地址,而这个地址空间内的0-1代码就是这个变量的值。不同的数据类型占有的空间大小不一,但是他们都必须有个地址,而这个地址就是硬件访问的依据,而名字只是提供给程序员的一种记住这个地址的方便一点的方法。但是,不同的变量在机器中都是0-1代码,所以,我们不能简单的通过检查一个值的位来判断它的类型。例如,定义如下:int a; fl转载 2015-05-15 20:57:50 · 1214 阅读 · 0 评论 -
package用法
java应用程序文件这个说法是我自己抽象出来的,指的是一般的组织在package中的所有文件。大体分成这三种:1,java程序源文件,扩展名为.java。2,编译好的java类文件,扩展名为.class。3,其他文件,除了以上的,就是资源文件。例如图片文件,xml文件,mp3文件等等等等都可以组织在package之中。(你当然也可以把一部电影放在package里面,当然转载 2015-08-25 17:36:59 · 1490 阅读 · 0 评论 -
linux内核原子操作的实现
所谓原子操作,就是“不可中断的一个或一系列操作”。硬件级的原子操作:在单处理器系统(UniProcessor)中,能够在单条指令中完成的操作都可以认为是“原子操作”,因为中断只发生在指令边缘。在多处理器结构中(Symmetric Multi-Processor)就不同了,由于系统中有多个处理器独立运行,即使能在单条指令中完成的操作也有可能受到干扰。在X86平台生,CPU提供了在指令执行转载 2014-06-30 14:16:20 · 1026 阅读 · 0 评论 -
C 语言的若干问题(持续更新中)
1.c 语言声明的作用: 在C语言中你所声明的所有字符串,会根据你当初对它声明的不同表现出不同的含义!你对字符串的声明,即代表此字符串所拥有的属性!是变量还是函数都会依据你的声明所定!例如:int func(void) , 此声明为一个典型的函数声明,此后出现func字符串,即代表对func函数的调用!func字符串代表的是一个函数,即一个处理过程的地址!int a[2], 此声明为一个数组的原创 2014-06-06 22:40:46 · 1680 阅读 · 0 评论 -
C语言可变参数处理
va_start,va_arg,va_end是在stdarg.h中被定义成宏的,由于1)硬件平台的不同 2)编译器的不同,所以定义的宏也有所不同,下面以VC++中stdarg.h里x86平台的宏定义摘录如下(’\’号表示折行): typedef char * va_list; #define _INTSIZEOF(n) \((sizeof(n)+sizeof(int转载 2014-02-07 13:33:48 · 780 阅读 · 0 评论 -
Android 智能指针
Android系统的运行时库层代码是用C++来编写的,用C++来写代码最容易出错的地方就是指针了,一旦使用不当,轻则造成内存泄漏,重则造成系统崩溃。不过系统为我们提供了智能指针,避免出现上述问题,本文将系统地分析Android系统智能指针(轻量级指针、强指针和弱指针)的实现原理。 在使用C++来编写代码的过程中,指针使用不当造成内存泄漏一般就是因为new了一个对象并且使用完之转载 2013-07-30 18:52:37 · 740 阅读 · 0 评论 -
C & C++ 作用域的概念
作用域在程序设计语言中非常重要,通常来说整个程序中所用到的标识符并不是在所有的范围内都是可见的,而若在某个范围内标识符是可见的,我们就认为此范围为标识符的作用域。 标识符的作用域通常是由编译器和链接器的特性所决定的。 在C语言中,函数内的变量,在声明时,被分配在栈空间中,故在函数退出时,变量被销毁,因此变量的作用域,只是在函数体内!而在函数体内声明的static 类型变量,虽然在分配内原创 2013-07-31 00:13:20 · 1204 阅读 · 0 评论 -
C++中访问控制
文章来源:http://blog.163.com/zhaoxin851055@126/blog/static/8112929820092514256782/1 #include 2 using namespace std;3 4 class A{5 public:6 A(int i_,int j_)7 {8 i=i_;转载 2013-08-02 01:36:39 · 964 阅读 · 0 评论 -
C++直接初始化和复制初始化
现在正式对C++中对象建立和初始化做一个总结。(1)复制初始化的基本原理我们知道,对象在内存中的直接表象是在内存中占有一个一定大小的空间。分配空间是建立对象的第一步。但是刚刚分配的空间就像一个没有开垦的荒田,或者是前面对象占有之后留下来的残余,从理论上讲,由于不管是什么大家都是0101,所以就算没有初始化也是有值的,只是这个值你是不能正确使用的。所以建立对象的关键在于如何对该对象所占有转载 2013-07-28 22:49:10 · 948 阅读 · 0 评论 -
C++中的namespace
命名空间(namespace)是一种描述逻辑分组的机制,可以将按某些标准在逻辑上属于同一个任务中的所有类声明放在同一个命名空间中。标准C++库(不包括标准C库)中所包含的所有内容(包括常量、变量、结构、类和函数等)都被定义在命名空 间std(standard标准)中了。定义命名空间有两种形式的命名空间——有名的和无名的。命名空间的定义格式为:(取自C++标准文档)转载 2013-12-07 15:17:55 · 673 阅读 · 0 评论 -
linux内核及驱动开发中有关__init,__exit和__initdata的用法
要了解Linux Kernel代码的分段信息,需要了解一下gcc的__attribute__的编绎属性或定义的函数或数,__attribute__主要用于改变所声明据的特性,它有很多子项,用于改变作用对象的特性。比如对函数,noline将禁止进行内联扩展、noreturn表示没有返回值、pure表明函数除返回值外,不会通过其它(如全局变量、指针)对函数外部产生任何影响。但这里我们比较感兴趣的是对代转载 2013-12-03 14:28:29 · 866 阅读 · 0 评论 -
register_chrdev
首先我们在注册函数里面调用了register_chrdev(MEM_MAJOR,"mem",&memory_fops),向内核注册了一个字符设备。第一个参数是主设备号,0代表动态分配,这里的MEM_MAJOR是1。第二个参数是设备的名字,第三个参数是文件操作指针。完成注册后,在/proc/devices中的第一个字符设备我们就看到了:1 mem。1.前面提到了注册,那这个字转载 2014-01-08 15:14:03 · 1035 阅读 · 0 评论 -
带参数的main函数
#include int main(int argc,char *argv[]){ for(inti=0;i) { cout'\t'; // } return0;} /*int argc, char **argv 用于运行时,把命令行参数传入主程转载 2014-01-08 19:08:15 · 874 阅读 · 0 评论 -
内核分析:EXPORT_SYMBOL解析
Kernel. EXPORT_SYMBOL解析 Code Segment: include/module.h: struct kernel_symbol { unsigned long value; const char *name;};/* For every exported symbol, place转载 2013-12-25 19:02:50 · 1232 阅读 · 0 评论 -
C预编译中的宏定义
在将一个C源程序转换为可执行程序的过程中, 编译预处理是最初的步骤. 这一步骤是由预处理器(preprocessor)来完成的. 在源流程序被编译器处理之前, 预处理器首先对源程序中的"宏(macro)"进行处理. C初学者可能对预处理器没什么概念, 这是情有可原的: 一般的C编译器都将预处理, 汇编, 编译, 连接过程集成到一起了. 编译预处理往往在后台运行. 在有的C编译器中, 这些过转载 2014-02-07 13:25:22 · 1132 阅读 · 0 评论 -
c++动态联编与静态联编
摘要】:本文阐述了静态联编和动态联编的概念和区别,通过具体实例分析了实现动态联编的条件,指出了虚函数是实现动态联编的基础。【关键词】:静态联编;动态联编;虚函数在C++中,联编是指一个计算机程序的不同部分彼此关联的过程。按照联编所进行的阶段不同,可分为两种不同的联编方法:静态联编和动态联编。 1. 静态联编静态联编是指联编工作在编译阶段完成的,这种转载 2015-12-06 17:11:30 · 795 阅读 · 0 评论