本文为个人读书笔记,仅供记录学习过程中遇到的日后需要留意的问题,如有相关版权问题请及时通知作者。
所有传递给函数的参数都是按值传递的。
C语言约定:字符串就是一串以nul字节结尾的字符。
为什么用一个整型来读取字符。因为EOF是一个整型值,位数比字符类型要多,用整型来读取字符可以防止输入读取的字符意外的被解释为EOF
要注意避免三字母词trigrph
??( | [ | ??< | { | ??= | # |
??) | ] | ??> | } | ??/ | \ |
??! | | | ??' | ^ | ??- | ~ |
字符常量的类型总是int
字面值就是常量,翻译不同
浮点数字面值在缺省情况下都是doble类型的。
使用typedef而不是#define来创建新的类型名,因为#define无法正确地处理指针类型
声明变量时,如果变量的值不会被修改,你应当在生命中使用const关键字。
应当避免在嵌套的代码块中出现相同的变量名。
当组成一个程序的各个源文件分别被编译之后,所有的目标文件以及那些从一个或多个函数库中引用的函数链接在一起,形成可执行程序。标示符的连接属性linkage决定如何处理在不同文件中出现的标识符。
链接属性一共有3中——external外部、internal内部和none无。没有连接属性的标识符总是被当做单独的个体,也就是说该标识符的多个声明被当做独立不同的实体。属于internal链接属性的标识符在同一个源文件内的所有声明中都指向同一个实体,但位于不同源文件的多个声明则分属不同的实体。external链接属性的标识符不论声明多少次、位于几个源文件都表示同一个实体。
如果某个声明在正常情况下具有external链接属性,在它前面加上static关键字可以使它的链接属性变为internal。static只对缺省连接属性为external的声明才有改变链接属性的效果。(全局函数全局变量)
当extern关键字用于源文件中一个标识符的第一次声明时,它指定该标识符具有external的连接属性。但是,如果它用于该标识符的第二次或以后的声明时,它并不会更改由第一次声明所指定的链接属性。
作用域/链接属性和存储类型总结
变量类型 | 声明位置 | 是否存于堆栈 | 作用域 | 如果声明为static |
全局 | 所有代码块之外 | 否 | 声明处到文件尾 | 不允许从其他源文件访问 |
局部 | 代码块起始处 | 是 | 整个代码块 | 变量不存储于对战中,它的值在程序整个执行期一直保持 |
形式参数 | 函数头部 | 是 | 整个函数 | 不允许 |
为了保持最佳的可移植性,把字符的值限制在有符号和无符号字符范围的交集之内,或者不要再字符上执行算数运算。
除了实体的具体定义位置之外,在它的其他生命为止都是用extern关键字。
及时switch中不需要default也最好加上default语句
逻辑右移,左边移入的位用0填充;算式右移,左边移入的位由原先该值的符号位决定,符号位为1则移入的位均为1,符号位为0则移入的位均为0,这样能够保持原数的正负形式不变。
ANSI C标准说明无符号值执行的所有移位操作都是逻辑移位,对于有符号值,逻辑移位还是算数移位取决于编译器。
要注意逻辑运算符的短路求值short-circuited evaluation特性