第01章 词法"陷阱"

作者: rfish | 来源:发表于2015-10-06 19:52 被阅读578次

    《C陷阱与缺陷》 Andrew Koenig 读书笔记


    1.1 =和==

    编写时建议:
    将变量放到==的后方,编译器可以检测误写成=的错误

    
    int a=1;
    if(1==a){
        //...
    }
    

    1.2 &和 | 不同于&&和 ||

    1.3 语法分析的“贪心法”

    c语言中符号有的只有一个字符长度(/ * =)有的是多个字符(/* ==)
    编译器在判断时的规则是“
    每个符号应该包含尽可能多的字符

    也就是说:
    编译器从左往右读字符,如果该字符可能组成一个符号,再读入下一个字符,判断这两个符号是否可以组成一个字符,如果可以,继续读入下一个字符,重复上述判断

    举例:

    a---b
    

    的实际意图是:a-- -b即先a--然后将结果减b

    而不是a- --ba减去 减减b

    注意: 在写的时候加上空格,或者括号将更便于阅读。

    y=x/*p;   //会解释为注释符号
    
    y=x / *p; //正确解释为 x除以*p,因为/和空格不能组成一个符号
    
    y=x/(*p); //正确解释 
    

    1.4 整型常量

    如果一个整型常量的第一个字符是数字0 ,该常量会被视作八进制

    • 159 是十进制整数159
    • 0159 是八进制,是十进制的141

    注意:
    在上下文中为了格式对齐,而无意中在十进制前添加了0

    046
    046
    125

    1.5 字符与字符串

    ' '的是字符
    “ ”的是字符串

    • 单引号括起来的一个字符代表一个整数
    • 双引号括起来的一个字符代表一个指针

    双引号的字符串代表的是一个指向无名数组起始字符的指针,该数组被双引号之间的字符以及额外的一个二进制值为零的字符'\0'初始化

    相关文章

      网友评论

      • 1ba2d2ac74bf:nice。
        但是一直觉的在实际开发应用中写出类似a---b这样类型的代码的人一定是初学者。
        six只羊:@喷气火箭 现在很多广告说教你直接实战~

      本文标题:第01章 词法"陷阱"

      本文链接:https://www.haomeiwen.com/subject/mrtncttx.html