c陷阱和缺陷的一点笔记
来源:互联网 发布:iphone已停用备份数据 编辑:程序博客网 时间:2024/05/21 09:49
1. #define N 1024
static char buffer[N];
static char *bufptr;
bufptr = buffer;( 或者bufptr=&buffer[0])
...
if(bufptr == &buffer[N])
{
...
}
其中,这句是正确的,我们不需要引用这个元素,而只需要引用这个元素的地址,并且这个地址在我们
遇到的C语言实现中
又是“千真万确”存在的。而且,ANSI C标准明确允许这种用法,数组中实际不存在的“溢界”元素的
地址位于数组所占内存之后,
这个地址可以用于进行赋值和比较。当然,如果要引用该元素,那就是非法的了。
2. 如果函数的调用和定义分别位于不同的文件中,那么我们必须在调用它的文件中声明该函数。
3. 在许多c语言实现中,信号是真正意义上的“异步”。从理论上说,一个信号可能在c程序执行期间的
任何时刻上发生。需要特别强调的是,信号甚至可能出现在某些复杂库函数(如malloc)的执行过程中。
因此,从安全的角度考虑,信号的处理函数不应该调用上述类型的库函数。
例如,假设malloc函数的执行过程被一个信号中断。此时,malloc函数用来跟踪可用内存的数据
结构很可能只有部分被更新。如果signal处理函数再调用malloc函数,结果可能是malloc函数用到的数据
结构完全崩溃,后果不堪设想!
4. 虽然这样也可以:
#defien FOOTYPE struct foo
FOOTYPE a;
FOOTYPE b,c;
但是,我们最好还是使用类型定义:
typedef struct foo FOOTYPE
因为在申明多个变量时,问题就产生了。
- c陷阱和缺陷的一点笔记
- 《c陷阱和缺陷》笔记--C编译器的注释嵌套
- 开始看c语言的缺陷和陷阱,写下笔记
- C陷阱&缺陷-笔记
- C陷阱和缺陷学习笔记
- C陷阱和缺陷学习笔记
- 《C语言陷阱和缺陷》笔记
- c陷阱和缺陷学习笔记
- C陷阱和缺陷
- C缺陷和陷阱
- c 缺陷和陷阱
- 关于《C陷阱和缺陷》中的(*(void(*)())0)()表达式的一点解析
- 看C陷阱与缺陷的一点收获
- 《c缺陷与陷阱》里的一点小错误
- C陷阱与缺陷笔记
- C缺陷与陷阱 笔记
- C陷阱与缺陷笔记
- C 陷阱与缺陷 笔记
- PHP设计模式之Prototype模式
- asp.net memcached
- 系统设计过程
- 虚拟主机中,不修改IIS设置,在IIS6下运行MVC架构的网站
- 读CopyOnWriteArrayList有感
- c陷阱和缺陷的一点笔记
- Ubuntu Linux 下文件名乱码(无效的编码)的快速解决办法
- 批处理学习笔记1
- How to detect virtualization 虚拟机检测
- delphi字符串函数大全
- smarty3.0.7官网下载的demo运行报错 /*%%SmartyNocache:221334da460b2356f10-15165135%%*//*/% 解决方法(转)
- 引入Adobe Flex 4.5 SDK
- Gentoo Linux以太网Bonding
- PHP设计模式之Singleton模式