vlambda博客
学习文章列表

C语言 | 编写头文件简述 与工程项目相关联系



本文以代码分析

文件有header.h 、main.c、a.c、b.c

C语言 | 编写头文件简述 与工程项目相关联系

编写  header.h

// 以下两句话,能防止头文件被重复包含#ifndef __HEADER_H // 如果没有定义该宏,则编译以下内容#define __HEADER_H // 立刻定义该宏,使得下一次的判断不成立
// 头文件的内容:// 总体的原则,是存放所有.c文件都要用的公共资源// 仔细分析,头文件可以包含如下内容:// 0,其他头文件// 1,普通函数的声明// 2,宏定义// 3,全局变量的声明// 4,静态函数的定义
// 其他头文件(比如系统的头文件)#include <stdio.h>
// 函数声明void fa(void);void fb(void);
// 宏定义#define MAX(x, y) \ ({ \ typeof(x) _x = x; \ typeof(y) _y = y; \ _x > _y ? _x : _y; \ })
// 声明全局变量(后面不要加赋值)extern int x;

// 静态函数的定义// 普通函数:在所有的.c文件中都可见// 静态函数:只在.c文件内部可见static void static_func(void){ printf("我是一个静态函数\n");}#endif

编写  main.c 

// 由于一个程序可能要引入非常多的函数声明// 为了方便,一般都将函数声明等公用的语句写入头文件// void fa(void);// void fb(void);
// 区别:// <>的搜索范围是系统头文件的指定目录(/usr/include)// ""的搜索范围是当前目录 + // 系统头文件的指定目录(/usr/include)#include <stdio.h> // 引用系统头文件用<>#include "header.h"// 引用系统头文件用""
#define ABCD
int main(void){ fa(); fb();
printf("x的值:%d\n", x);


// 条件编译// 含义: 如果定义了ABCD这个宏,则编译其所包含的语句// 如果没有定义ABCD这个宏,则删除其所包含的语句#ifdef ABCD printf("定义了ABCD这个宏\n");#endif
// 含义: 如果没有定义ABCD这个宏,则编译其所包含的语句// 如果已经定义了ABCD这个宏,则删除其所包含的语句#ifndef ABCD printf("没有定义ABCD这个宏\n");#endif}

编写  a.c

// 包含系统的标准输入输出头文件// 以便于可以正常使用printf 函数#include "header.h"#include "header.h"#include "header.h"#include "header.h"#include "header.h"#include "header.h"
void fa(){ printf("我是fa\n"); printf("最大值:%d\n", MAX(66, 88));
// 调用静态函数 static_func();}
// 全局变量int x = 100;

编写 b.c

// 包含系统的标准输入输出头文件// 以便于可以正常使用printf 函数#include "header.h"
void fb(){ printf("我是fb\n"); printf("最大值: %d\n", MAX(111, 222));
printf("x的值: %d\n", x);
// 调用静态函数 static_func();}




记录点点滴滴的笔记欢迎关注,共同学习

一纸途途