分而治之
main()里面程序太长适合分成几个函数
一个源代码文件太长适合分成几个文件
编译单元
一个.c文件就是一个编译单元
编译器一次只能处理一个.c文件
项目
Dev c++的编译时将每个源代码编译后连接起来
有的IDE编译和链接是分开的(编译和构建),VS…
头文件
函数原型
如果不给出函数原型,编译器会猜测函数传入,返回 都是int
编译器编译时只看当前源程序,不会去同项目中其他源程序中找函数原型
如果你的函数并非int ,编译时不会出错,链接时也不会报错,但执行时就不对了
故要在调用函数的地方告诉编译器,函数原型是什么,即头文件
头文件.h
1.将函数原型放入头文件中(.h结尾),在调用该函数的源程序中#include这个
头文件,即告诉了编译器函数原型是什么
2.一般任何.c文件都有对应同名的.h文件,所有对外公开函数的原型、全局变量
的声明都放进去
#include
#include是编译预处理指令,和宏一样,编译前先执行
#include把那个文件的文本原封不动地放在它所在位置,不一定非要放在开头
“ ”方式指出头文件,要求编译器先在当前.c文件所在目录找头文件,没有再去
编译器指定的目录找。
<>方式指出头文件,直接去系统指定目录找。
#include"myway.h"
#include<stdio.h>
不对外公开的函数
在函数前加上static,就是只能在当前编译单元使用的函数
在全局变量前加static,就是只能在当前编译单元使用的全局变量
(注意与静态本地变量区分)
声明
int i;是变量的定义。
extern int i;是变量的声明。
声明是不产生代码的东西:(只有声明可以放在头文件中)
函数原型
变量声明
宏声明
结构声明
枚举声明
类型声明
inline函数
定义是产生代码的东西。
标准头文件结构
用以避免同一个编译单元中,同名的结构被重复声明
运用条件编译和宏,保证一个头文件在一个编译单元内只被#include一次
#ifndef __List_Head__
#define __List_Head__
#include"node.h"
struct node _list;
typedef struct {
node* head;
node* tail:
}
#endif
如有错处,欢迎指正。(根据慕课翁凯老师课程做的笔记)