C
xiaoyusmile
这个作者很懒,什么都没留下…
展开
-
预处理——如何避免对同一头文件的多次include
在同一个项目中可能会出现对同一个头文件include多次的情况。例如:在a.h文件中include了stdio.h,在b.c中include了stdio.h、a.h。 如果没有做适当的处理,编译器将认为程序对某些宏、结构等进行了重复定义。 使用条件编译(ifndef/define/endif)可以避免这种情况。 条件指示符#ifndef检查预编译常量在前面是否已经被原创 2010-03-26 15:43:00 · 4256 阅读 · 0 评论 -
找错——死循环
代码:#include int main(void){ unsigned i; for( i=9 ; i >= 0 ; i--) { printf("%u/n", i); } return 0;}unsigned类型的数据永远都是>=0的,所以循环的条件一直成立,构成死循环。i=0时,i--后,i是unsigned类型数据中的最大值。原创 2010-04-26 11:07:00 · 490 阅读 · 0 评论 -
找错——函数返回局部指针
代码:char *test(const char s[]){ char tstr[50]={/0}; unsigned int i,k=0; for(i=0;i { if(s[i]!=) tstr[k++]=s[i]; } return tstr;} 错误:返回了一个局部地址。tstr是在函数中声明的一原创 2010-04-26 10:57:00 · 456 阅读 · 0 评论 -
变量——局部变量在函数退出后是否有效,为什么?
无效。函数运行过程中,其用到的局部变量保存在堆栈中。当函数退出后,函数运行期间使用的局部变量将全部“弹出”堆栈,继而失效。原创 2010-04-13 10:55:00 · 3249 阅读 · 0 评论 -
变量——不同类型的变量,你是否知道其作用域?
1. 具有外联接的全局变量:在所有函数外部声明的变量,且没有static修饰符,例如:/* a.c 文件 */int total = 0;此类变量具有文件作用域,在本文件中从定义开始处至文件结尾均可见。在本文件的开始至定义此变量处及其他文件中,可使用extern修饰符来引用该变量。例如:/* b.c文件 */extern int total;进行上述声明后,可在b原创 2010-04-13 10:47:00 · 655 阅读 · 0 评论 -
变量——全局变量和局部变量是否可以重名?你是否在这样做?
可以重名,在局部变量作用域内局部变量将“覆盖”全局变量。建议不要使用与全局变量重名的局部变量,这样容易引起混淆,出现错误不易调试。原创 2010-04-13 10:54:00 · 1189 阅读 · 0 评论 -
sizeof总结1
1. 对于字符数组,strlen和sizeof的值是否相同?不同。strlen的计算结果是字符串的实际长度,sizeof的计算结果是数组所占的存储空间。eg:char a[10] = “hello”;strlen(a) = 5;sizeof(a) = 10; 2. Sizeof本质上是函数还是宏?二者都不是。sizeof是运算符,并且其计算发生在编译时刻,结原创 2010-03-30 16:19:00 · 432 阅读 · 0 评论 -
声明的优先级规则
《Expert C Programming》(《C专家编程》)中提到C语言声明的优先级规则如下: A 声明从它的名字开始读取,然后按照优先级顺序依次读取; B 优先级从高到低依次是: B.1 声明中被括号括起来的那部分; B.2 后缀操作符:括号()表示这是一个函数,而方括号[]表示这是一个数组; B.3转载 2010-03-30 16:25:00 · 640 阅读 · 0 评论 -
sizeof
sizeof 转载关键字:sizeof,字节对齐,多继承,虚拟继承,成员函数指针前向声明:sizeof,一个其貌不扬的家伙,引无数菜鸟竟折腰,小虾我当初也没少犯迷糊,秉着“辛苦我一个,幸福千万人”的伟大思想,我决定将其尽可能详细的总结一下。但当我总结的时候才发现,这个问题既可以简单,又可以复杂,所以本文有的地方并不适合初学者,甚至都没有必要大作文章。但如果你想“知其然,更知其所以然”的话,转载 2010-03-30 15:36:00 · 535 阅读 · 0 评论 -
变量——全局变量为什么不允许定义在头文件中?有何危害?
当多个文件都引用同一个定义了全局变量的头文件时,会出现变量重复定义的情况。原创 2010-04-13 10:56:00 · 944 阅读 · 0 评论 -
变量——全局变量,局部变量,常量分别保存在内存中的什么地方?
全局变量、静态局部变量保存在全局数据区,初始化的和未初始化的分别保存在一起; 普通局部变量保存在堆栈中; 常量分为普通常量(比如2,3.0,#define PI 3.14)和文字常量(比如“hello world”)。普通常量经编译后成为二进制程序代码的一部分;文字常量保存在文字常量区,这部分内存中的内容不允许修改。原创 2010-04-12 09:16:00 · 4143 阅读 · 0 评论 -
定义和声明
1. 变量的定义、声明变量的声明有两种情况: 一种是需要建立存储空间的。例如:int a。在声明的时候就已经建立了存储空间。这种声明是"定义性声明(defining declaration)",即我们平时所说的“定义”。 另一种是不需要建立存储空间的,只是告诉编译器某变量已经在别处定义过了。例如:extern int a。其中,变量a是在别处定义的。这种声明是"引用性声明(re原创 2010-03-26 16:48:00 · 9566 阅读 · 2 评论 -
共享软件——virtual alua
最近,我的一位好友推出了自己的首个共享软件——virtual alua,一款虚拟disk array。我的这个朋友是我所有朋友里最有天分的一个。我始终相信,他肯定会有所成就的。因为,我相信那句“天生我材必有用”。上天给了他这么好的天分一定是有原因的。祝福他,希望他的软件能够方便很多很多人,希望有更多的人能够认识这位朋友,希望他这匹千里马能够早日遇到他的伯乐。原创 2013-03-18 11:03:44 · 614 阅读 · 0 评论