声明
//main.c
#include<stdio.h>
#include"max.h"
//int max(int a, int b);
int main(int argc, char const *argv[])
{
int a = 5;
int b = 6;
printf("%d\n", max(a,gAll));
return 0;
}
//max.c
#include"max.h"
int gAll = 12;
int max(int a, int b)
{
return a>b?a:b;
}
//max.h
int max(int a, int b);
extern int gAll;
12
变量的声明
- int i;是变量的定义
- extern int i;是变量的声明
声明和定义
-
声明是不产生代码的东西
- 函数原型
- 变量声明
- 结构声明
- 宏声明
- 枚举声明
- 类型声明
- inline函数
-
定义是产生代码的东西
头文件
-
只有声明可以被放在头文件中
- 是规则不是法律
-
否则会造成一个项目中多个编译单元里有重名的实体
- *有些编译器允许几个编译单元中存在同名的函数,或者用weak修饰符来强调这种存在
重复声明
- 同一个编译单元中,同名的结构不能被重复声明
- 如果你的头文件里有结构的声明,很难这个头文件不会在一个编译单元里被#include多次
- 所以需要“标准头文件结构”
//main.c
#include<stdio.h>
#include"max.h"
//int max(int a, int b);
int main(int argc, char const *argv[])
{
int a = 5;
int b = 6;
printf("%d\n", max(a,gAll));
return 0;
}
//max.c
#include"max.h"
int gAll = 12;
int max(int a, int b)
{
return a>b?a:b;
}
//max.h
#ifndef _MAX_H_
#define _MAX_H_
int max(int a, int b);
extern int gAll;
struct Node{
int value;
char *name;
};
#endif
//min.h
#include "max.h"
12
标准头文件结构
#ifndef _LIST_HEAD_
#define _LIST_HEAD_
#include "node.h"
type struct _list{
Node* head;
Node* tail;
} List;
#endif
- 运用条件编译和宏,能保证这个头文件在一个编译单元中智慧被#include一次
-
pragma once也能起到相同的作用,但是不是所有的编译器都支持
网友评论