12.2.1
- #开头的是编译预处理指令
- 不是C语言的成分,但是C语言程序离不开它们
- #define用来宏定义。
- #define PI 3.14159 (无分号,因为其不是C的语句)
- PI 单纯的文本替换
- #define可以定义一条语句,多条语句之间用 \ 连接,比如:#define PRG printf("%d",a); \ printf("%d",b)
- 预定义的宏:_FILE_文件路径(%s),_LINE_行数(%d),_TIME_,_DATE_时间(%d)日期(%s)
12.2.2
- 带参数的宏类似于函数:(每一个参数都需要带括号)(千万不要加分号)
-
#define CUBE (x) ((x)*(x)*(x)) #define MIN(a,b) ((a)>(b)?(b):(a))
12.3.2
- 头文件即为:xxx.h文件,里面保存的仅仅是函数的原型。
- #include 头文件相当于原封不动的移动文字,<>相当于在指定目录里找文件,“ ”相当于在当前目录找文件。
- 自己定义的文件需要写头文件,主函数内也要写头文件。(#include相当于是个桥梁,连接各个文件)
- 在全局变量里面加上static此变量,或函数加上static,只能在此.c文件能用。
- 对于没有#include<stdlib.h>的情况,malloc也不会出错,纯粹是碰巧,因为在stdio.h里的声明恰好与使用的malloc类型相符。
- 例如:(void*)malloc(sizeof(int)); 其中的参数以及返回的指针均是int型,与<stdio.h>声明的数据类型相符。
12.3.3
- 全局变量在其他文件的用法:在定义全局变量的文件内声明:extern int gAll;
- 标准头文件结构:(保证在大型项目中,头文件在一个编译单元中只能被#include一次)
-
#ifndef__LIST_HEAD__ //名称就是文件名的大写 #define__LIST_HEAD__ struct ARR{ int a; int b; }arr; #endif