zoukankan      html  css  js  c++  java
  • C陷阱与缺陷读书笔记(三)

    第四章 连接 没有看好,需要回过头再看

    4.1 static修饰符

    第五章 库函数 暂且跳过

    第六章 预处理器(宏的总结)

    6.1 宏定义中不能有空格

    #define f (x) ((x)-1)   //only define f, not f(x)
    #define f(x) ((x)-1)    //define f(x)

      但是调用不受空格影响

    f(3) == 2
    f (3) == 2

    6.2 宏非函数,建议定义时把变量与整体用括号括起来,这样更加安全,例如:

    #define max(a,b) ((a)>(b)?(a):(b))

    同时,不要使用类似

    max(a++,b);

    这样方式,因为这样a++可能执行两次。

    6.3宏并非语句,注意分号。

    6.4 宏并非类型定义,typedef比宏好,例如:

    #define TI struct foo*
    typedef struct foo* T2;
    
    T1 a,b;
    T2 a,b;
    
    struct foo* a,b;
    //对于第一个声明,a变成了指针,b为一个结构体
    //第二个声明完成了类型的定义

    第七章 可移植性的缺陷

    7.2  C实现必须能够区分前6个字符不同的外部名称,且这个定义中并不区分大小写。例如:

    char * Malloc(unsigned n)
    {
        char *p, *malloc(unsigned);
        p = malloc(n);
        if(p == NULL)
            panic("out of memory");
        return p;
    }

    上述代码会陷入迭代,因为编译器无法区分malloc与Malloc。

    7.4 将有符号char转换为无符号应:  (unsigned char) c;

  • 相关阅读:
    添加linux alias
    vs2019 switch语句快捷键列出枚举 及常用快捷键
    generic 泛型使用
    华为云 安装centos8.2
    linux 安装redis,mysql,netcore
    react按需加载
    工具类注册基本写法
    vue项目使用深拷贝
    react+less+antd 复习搭建(一)
    python 1 cmd进入工作
  • 原文地址:https://www.cnblogs.com/dzy521/p/9413859.html
Copyright © 2011-2022 走看看