基于唐老师 "C语言专题" 总结
Don Hsi-Yun Yang
注释
编译器会在编译过程删除注释,但不是简单的删除而是用空格代替
编译器认为双引号括起来内容都是字符串,双斜杠也不例外
“/***/”型注释不能被嵌套
方式
/* ..... */
//
出色的注释
注释应该准确易懂,防止二义性,错误性
注释是对代码的提示,避免臃肿和喧宾夺主
一目了然的代码避免加注释
不要用缩写来注释代码,以免产生误解
注释用于阐述原因而不是用于描述程序的运行过程
接续符
接续符
(
\)是指示编译器行为的利器
编译器会将反斜杠剔除,跟在反斜杠后面的字符自动解到前一行
在接续单词时,反斜杠之后不能有空格,反斜杠的下一行之前也不能有空格
接续符适合在
定义宏代码块时使用 < 宏代码最后一行不需要加 \ >
转义符
转义符(\)主要用于表示无回显字符,也可用于表示常规字符
C中反斜杠(\)同时具有接续符和转义符的作用
当反斜杠作为接续符使用时可直接出现在程序中
当反斜杠作为转义符使用时需出现在字符或字符串中
单、双引号
单引号表示字符常量
双引号表示字符串常量
'a'表示字符常量,在内存中占一个字节
‘a’ + 1 表示‘a’的ASCII码加1,结果为‘b’
“a”表示字符串常量,在内存中占二个字节
“a” + 1表示指针运算,结果指向“a”结束符'\0'
本质上单引号括起来的一个字符代表整数
双引号括起来的字符代表一个指针
++、--
a++/-- 先进行其它运算,后a+/-1
++/--a 先a+/-1,后进行其它运算
贪心法-- ++,--表达式的阅读技巧
编译器处理的每个符号应该尽可能多的包含字符
编译器以从左向右的顺序一个一个尽可能多的读入字符
当即将读入的字符不可能和已读入的字符组成合法符号为止
#
#运算符用于在预编译期将 宏参数转换为字符串
##
##运算符用于在预编译期
粘连两个符号
预处理后文件
宏常量
#define定义宏常量可以出现在代码的任何地方
#define从本行开始,之后的代码都可以使用这个宏常量
宏表达式在预编译期被处理,编译器不知道宏表达式的存在
宏表达式用“实参”
完成替代形参,不进行任何运算
宏表达式没有任何的"调用"开销
宏表达式不能出现递归定义
内置宏