c陷阱和缺陷的一点笔记

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

因为在申明多个变量时,问题就产生了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值