2007年3月16日星期五

阅读《C陷阱与缺陷》:……


  • 宏中的空格

  • 在语句“#define f (x) ((x)-1)”中,若要定义类似函数f(x)的功能,则f后的空格将会引起错误的替换。正确的写法是“#define f(x) ((x)-1)”。但此空格规则不适合宏调用,如“f (3)”其值仍为2。
  • 兼容性一例

  • 为保持与老版本编译器的兼容性,函数定义如:
    void func(int arg1,int arg2)
    { ... }

    也可写成
    void func(arg1,arg2)
    int arg1, arg2;
    { ... }


    void func(arg1,arg2)
    int arg1; int arg2;
    { ... }



  • 在C中(包括gcc与MSC),如下写法是错误的:
    for(int i=0;i<n;i++) { ... } 
    而应该写成
    int i;
    for(i=0;i<n;i++) { ... }
  • 多余的逗号

  • 在C中,允许初始化列表中出现多余的逗号。例如:
    int days[] = {1,2,3,4,5,};
    但只能在 末尾 多 一 个。