C/C++ 基础 (2)

 1.无符号运算之间不会溢出,无符号和有符号数之间也不会溢出,有符号数之间运算才会溢出

   if( a > INT_MAX  - b) 

2.库函数signal:

    作为捕获异步事件的一种方式。

   假设malloc函数执行过程中被一个信号中断。此时,malloc函数用来跟踪可用内存的数据结构可能只有部分更新。如果signal处理函数malloc,结果可能是malloc函数用到的数据结构完全崩溃,不堪设想。

   信号非常复杂棘手,而且从本质上而言不可移植的特性,解决这个问题,我们最好采取守势,让signal尽可能处理的简单,合理的组织在一起。这样,当需要适应一个新系统时,我们可以轻易的进行修改

3.宏:

  1.宏之间的空格:  #define  f   (x)  ((x-1))   

 2.即使宏定义中的各个参数与整个结果表达式都被括号括起来,也可能仍有其他问题存在。宏不是函数,只是文本上的替换。

  3.宏展开可能是非常庞大的表达式,占用的空间远超我们所想,这个时候,还不如简单写些语句

  4.宏也不是语句

  5. 宏并不是类型定义:

    #define FOOTYPE  struct foo

     FOOTYPE a;

     FOOTYPE  b,c;

以上合法,但我们最好还是使用类型定义:

   typedef  struct  foo  FOOTYPE;

 

6.标识符名称的限制:

  为了保证程序的可移植性,谨慎的选择外部标识符名称是重要的。例如自己编写的Malloc中调用malloc函数,由于c语言编译器会把malloc 和Malloc 当做一个,这样就会引起一系列的递归调用。

 

7.hash表:多线程,设计模式,多线程,Liunx,Qt,Python,人工智能

posted @ 2018-08-23 20:37  Kiris  阅读(23)  评论(0编辑  收藏  举报