C语言杂记1

时间:2021-11-07 16:11:04

                                                                                                               C语言杂记

       注意signed int 与 unsigned int 之间的比较,与运算因为当int 型变量为-1时很可能被升级成无符号整型,就导致取反+1这种运算的产生,出现无法控制的很大的数。

      malloc(strlen(str))绝对错误地语句,考虑字符串需要+1.

      NULL 与NUL的区别:

               NUL:用于结束一个字符串。

               NULL:表示什么也不做(空指针)。

     在switch语句中defaut关键字可以放在任意位置,编译器不检查,可能导致无意的跳过case.

     注意变量的作用域如果过宽会对库函数造成影响。其中有一个all -- or -- nothing 原则,一个符号要么全局可见,要么对其他文件都不可见。

     C语言似乎比其他语言更接近标记歧义性的曲折边缘。

    结合性:

              只用于表达式中出现两个以上相同优先级的操作符的情况,用于消除歧义。

   gets()函数导致蠕虫病毒,并且现在的BUG还没有清除。

   sizeof的操作数最好加上括号,不然容易引起歧义如(sizeof*p)

    C语言 还有最大一口策略,如果下一种标记有超过一组的解释方案,编译器将自动选取能组成最长字符序列的方案。

   注意const 的用法

   指针的声明方法

   结构体的内存对齐问题

   为了代码的可读性,变量的声明应该与类型的声明分开

   一个整形参数一般会被传递到寄存器中,而结构体参数很可能会被传递到堆栈中。

  define 与typedef的区别

     1.define与其他的类型相配进行扩展,typedef却不行

     2.在连续变量出现时,define只控制前一个变量,typedef则控制所有的变量