《C陷阱和缺陷》 - 1.词法陷阱

Q1:token
 
A:
程序的一个基本组成单元,作用相当于一个句子中的单词。
 
 
Q2:词法分析器
 
A:
编译器中负责将程序分解为一个个符号的部分。
C语言采用:"贪心法",即每一个符号应该包含尽可能多的字符。
1.
    a---b     a-- -b
    a- --b
 
2.
    y = x/*p    /*被理解为注释的开始
    y = x / *p   y = x/(*p)
 
 
 
Q3: = 不同于 == 
 
A:
=  赋值运算 a = b = c
== 比较运算
 
while(c = ' '  || c == ''|| c == '\n')
    c = getc(f)
会被解释为(逻辑运算 || 优先级高于 = )
    ' '  || c == ''|| c == '\n'
即一直满足条件
 
Q4: & 和 | 不同于 &&和||
 
A: 
& 和 | 按位运算
&& 和 || 逻辑运算
 
 
Q5:整型常量0开头
 
A:
如果一个整形常量的第一个字符是数字0,那么该字符将被视作八进制数。
故,10和010的含义截然不同。
有可能在上下文对齐的时候,无意间携写成了八进制。
    046 ,"Left - handed widget "
    125 ,   "Right - handed widget"
 
Q:字符与字符串,单引号和双引号
 
A:
单引号引起一个字符,相当于代表一个整数
双引号引起的字符串,相当于一个指向无名数组起始字符的指针,包含数组 + '\0'
"yes"   'y' 'e' 's' '\0'
'yes'    在VC和 GCC中,'s'
posted @ 2019-04-05 23:32  Peong  阅读(84)  评论(0)    收藏  举报