随笔分类 -  关键字

摘要:在C/C++程序的编写中,当多个基本数据类型或复合数据结构要占用同一片内存时,我们要使用联合体;当多种类型,多个对象,多个事物只取其一时(我们姑且通俗地称其为“n 选1”),我们也可以使用联合体来发挥其长处。首先看一段代码:union myun {struct { int x; int y; int z; }u; int k; }a; int main() { a.u.x =4;a.u.y =5; a.u.z =6; a.k = 0; printf("%d %d %d\n",a.u.x,a.u.y,a.u.z);return 0;}union类型是共享内存的,以size最大 阅读全文
posted @ 2012-09-09 14:35 byfei 阅读(789) 评论(0) 推荐(0) 编辑
摘要:Extern的问题在于不知道这个关键词出现的时候到底是声明还是定义。谨记:声明可以多次,定义只能一次。函数的声明extern关键词是可有可无的,因为函数本身不加修饰的话就是extern的。但是引用的时候一样是需要声明的。而全局变量在外部使用声明时,extern关键词是必须的,如果变量无extern修饰且没有显式的初始化,同样成为变量的定义,因此此时必须加extern,而编译器在此标记存储空间在执行时加载如内存并初始化为0。而局部变量的声明不能有extern的修饰,且局部变量在运行时才在堆栈部分分配内存。引用性声明、定义性声明强符号、弱符号出现在linux的gcc链接分析中,可以加深链接的理解。 阅读全文
posted @ 2012-09-09 14:33 byfei 阅读(1039) 评论(0) 推荐(0) 编辑
摘要:1.用于变量前,表示每次重新使用该变量所在方法、类或自定义类时,变量的值为程序这次运行最后一次为变量赋值时的值,这个方法称为静态函数:private void s(){static int a=1;a++;}方法第一次调用结束后a在内存内值为2;方法第一次调用结束后a在内存内值为3;2.在方法(函数)前用 static修饰,表示此方法为所在类或所在自定义类所有,而不是这个类的实例所有,这个方法称为静态方法:情况一:非静态方法:class t{t(....(参数,下面同)){~~~~(方法内容,下面同)}void s(....){~~~~}}当你在其他方法里调用这个类中的方法 s,则需先声明这个 阅读全文
posted @ 2012-09-09 14:30 byfei 阅读(467) 评论(0) 推荐(0) 编辑
摘要:介绍内联函数之前,有必要介绍一下预处理宏。内联函数的功能和预处理宏的功能相似。相信大家都用过预处理宏,我们会经常定义一些宏,如#define TABLE_COMP(x) ((x)>0?(x):0) 就定义了一个宏。 为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。而宏只是在预处理的地方把代码展开,不需要额外的空间和时间方面的开销 阅读全文
posted @ 2012-06-29 15:04 byfei 阅读(446) 评论(0) 推荐(0) 编辑
摘要:volatile的作用: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值. 简单地说就是防止编译器对代码进行优化.比如如下程序: XBYTE[2]=0x55; XBYTE[2]=0x56; XBYTE[2]=0x57; XBYTE[2]=0x58; 如果对外部硬件上述四条语句分别表示不同的操作,会产生四种不同的动作,那么编译器就不能像对待纯粹的程序那样对上述四条语句进行优化只认为XBYTE[2]=0x58;而忽略前三条语句(即只产生一条机器代码),此时编译器会逐一的进行编译并产生相应的机器代码(四条).volatile一般使用的地方 一般说来,volat... 阅读全文
posted @ 2012-06-28 11:41 byfei 阅读(186) 评论(0) 推荐(0) 编辑