扩展:
1.回车\r:光标回到当前行的最开始。换行\r:光标移动到下一行。
2.C99规定,’a‘叫做整形字符常量,被看成int型。
3.健壮性:系统在不正常输入情况下仍能表现正常的程度。
4.取整:C中默认向0取整,floor(向-∞取整);trunc(向0取整);ceil(向+∞取整);round(四舍五入)。取余:尽可能让商向0取整;取模:尽可能让商向-∞取整;(a=q*d+r)
5.宏定义字符串一定要带上“ ”。
6.预处理:文本式代码转为二进制代码称为翻译。①预处理-E:头文件展开、去注释、宏替换、条件编译②编译-S:C语言编译为汇编语言③汇编-c:将汇编语言转化为可重定向的二进制文件(可被链接)④链接:自身程序+库文件进行关联,形成可执行程序。预处理阶段先去注释,在宏替换。
7.宏定义还可以通过命令行、预处理器定义。条件编译支持嵌套。头文件展开:将头文件的内容,拷贝至目标源文件。
8.#error" " :打印信息到输出(编译不通过)。__FILE__文件信息,__LINE__ 所在行号;#line 60 “ ”自定义行号为60。#pragma message(“ ”),打印信息到输出(能编译通过)。#pragma pack(x),设置内存最小对齐数为x。
9.相邻字符串具有自动连接属性。#: #define STRING(s) #s 将宏参s转为字符串。##:#define XNAME(n) student##n 将宏参文本链接。
主要内容:
1.注释符号:注释被替换,本质是替换成空格。
2.\:①续行符之前可以空格,之后只能跟回车。②转义符,字面转特殊n->\n;特殊转字面"->\"。
3.逻辑运算符:&& || 从左向右执行,&& 前为假,发生短路;|| 前为真,发生短路。
4.按位运算符:& :按位与 。 | :按位或。^:按位异或。 ~:按位取反。任何数与0异或是他本身,交换a b的值,a=a+b;b=a-b;a=a-b; (有溢出风险)。a=a^b;b=a^b;a=a^b;溢出发生于寄存器,截断发生于内存。
5.<< >>:左移,最高位丢弃,最低位补0;右移,最低位丢弃,最高位无符号补0(逻辑右移),有符号最高位补符号位(算数右移)。
6.#define:替换多条语句时,可以写成do { } while(0)结构(尽量少用)。宏中的参数尽量都带上括号。#undef:取消宏,用来限定宏的有效范围。宏可以定义在源文件的任意地方,一般习惯于放在最上面。与是否在函数内无关。宏的作用范围:定义处往后都是有效的。
7.条件编译:#ifdef #ifndef #if #else #endif #if defined()。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#define C
#define CPP
#define LLL
int main()
{
#if (defined(C)&&defined(CPP))
#if defined(LLL)
printf("real");
#endif
printf("C+CPP");
#else
printf("fake");
#endif
}
//#define C
//int main()
//{
//#ifndef C
// printf("no define");
//#else
// printf("define");
//#endif
//
//}
//#define C 0
//int main()
//{
//#if C
// printf("real");
//#else
// printf("fake");
//#endif
//
//}