C语言 头文件源文件及include包含指令
1- 头文件:(head),所以文件后缀是.h,head的简称。
头文件是源文件的辅助文件,一般把一些变量,函数定义到头文件,而函数的实现放在源文件。头文件主要解决可以拆分大的源文件,实现在在主函数中共享其他源文件的变量或函数。比如把输入/输出函数原型放在 stdio.h 中,把数学函数原型放在 math.h 中。头文件可以将源文件的有效信息提取出来,就像身份证吧一个人信息概括了一样。一般情况下,函数的声明,应该放在头文件。函数的实现与变量的定义应当放在源文件。
常用标准库头文件:
标准函数库头文件 | 解释 |
---|---|
assert.h | 包含了在辅助程序调试中怎加诊断功能的宏定义和相关信息 |
ctype.h | 包含了测试具有某种属性字符的函数,能够将小写字母转换成大写字母或者逆变换函数的函数原型 |
erron.h | 定义用于报告错误条件的宏 |
float.h | 包含了系统中浮点数大小的边界限制 |
limits.h | 包含了系统中整数大小的边界限制 |
locale.h | 包含了能够修改程序中正在运行的当前现场的函数原型和其他信息,程序现场的标记使得计算机系统能够处理在表示诸如日期,时间,货币总数及涉及巨大数值这样的数据时不同习惯的用法。 |
math.h | 包含了数学库的 函数原型 |
setjmp.h | 包含了能绕过通常的程序调用和返回序列的函数的函数原型 |
signal.h | 包含了处理在程序运行中产生的各种条件的函数原型和宏 |
stdarg.h | 定义处理传递给一个形参个数和类型都是未知的函数的一组实参的宏 |
stddef.h | 包含了C语言用来执行某种计算的数据类型的公共定义 |
stdio.h | 包含了标准的输入/输出库函数的函数原型,及其相关信息 |
stdlib.h | 包含了将数值转换成文本或者文本转换成数值函数,内存分配函数,随机数函数和其他工具函数的函数原型 |
string.h | 包含了字符串处理的函数的函数原型 |
time.h | 包含了用于处理时间和日期的函数原型和数据类型 |
2- #include是预编译指令,将其他文件的内容包含进来。
如:#include<stdio.h>
#include"Test.txt"
可以包含头文件,也可以包含其他任意类型的文件
预编译指令一般不需要加分号,对于 include来说,加上也不影响。
示例:
新建一个 txt 后缀名文件(任何后缀名称都可以)。如上图
在main 函数中调用:
#include<stdio.h>
int main (void)
{
#include"Test.txt" //也可以在 main 函数中引用
getchar ();
return 0;
}
输出:
3 – C++的源文件是兼容C语言源文件,写C语言可以用C++的源文件(.cpp),也可以用C语言的源文件(.c) #include可以包含任意类型,不仅.h也可以.c,也可以.cpp。
综合示例:
/*
hotel.h : 头文件中定义常量和函数声明:
*/
#pragma region 宏定义 -- 定义常量
#define QUIT 5
#define HOTEL1 80.00
#define HOTEL2 125.00
#define HOTEL3 155.00
#define HOTEL4 200.00
#define DISCOUNT 0.95
#define STARS "**********"
#pragma endregion
#pragma region 函数声明
//给出选项列表
int menu (void);
//返回预定的天数
int getnights (void);
/*
计算价格并显示出来:
double 价格
int 天数
*/
void showPrice (double, int);
#pragma endregion
/*
hotel.c :旅馆管理函数 (实现 hotel.h 头文件函数)
*/
#define _CRT_SECURE_NO_WARNINGS //宏定义,去掉安全检查
#include<stdio.h> //应用标准库函数
#include"hotel.h" //引用自定义函数。注意时 "" 号
int menu (void)
{
int code, status;
printf ("\n%s%s\n",STARS,STARS );
printf ("输入所需酒店的编号: \n");
printf ("1) Fairfield Arms ,2) Hotel Olympic\n");
printf ("3) Chertowerthy Plaze 4) The Stockton\n");
printf ("5) 查询 \n");
printf ("\n%s%s\n", STARS, STARS);
while ((status=scanf("%d",&code))!=1||(code<1||code>5))
{
if (status != 1)
{
scanf ("%*s");
printf ("请输入从 1 到 5 的整数!\n");
}
}
return code;
}
int getnights (void)
{
int nigths;
printf ("how many nigths are needed?\n");
while (scanf("%d",&nigths)!=1)
{
scanf ("%*s");
printf ("Plase enter an integer ,such as 2.\n");
}
return nigths;
}
void showPrice (double rate, int nigths)
{
double total = 0.0;
double factor = 1.0;
for (int i = 1; i <= nigths; i++,factor *=DISCOUNT)
{
total += rate*factor;
}
printf ("The total cost will be $%0.2f.\n", total);
}
/*
程序入口函数
*/
#include<stdio.h>
#include"hotel.h"
int main (void)
{
int nigths;
double hotel_rate;
int code;
while ((code=menu())!=QUIT)
{
switch (code)
{
case 1:hotel_rate = HOTEL1;
break;
case 2: hotel_rate = HOTEL2;
break;
case 3:hotel_rate = HOTEL3;
break;
case 4:hotel_rate = HOTEL4;
break;
default: hotel_rate = 0.0;
printf ("Oops\n");
break;
}
nigths = getnights ();
showPrice (hotel_rate, nigths);
}
printf ("Thank you and goodbye!");
return 0;
}