本文为我的读书笔记,仅供记录学习过程当中遇到的往后须要留意的问题,若有相关版权问题请及时通知做者。
全部传递给函数的参数都是按值传递的。
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特性