标题是C程序员普遍接受的约定。

这是一个通常包含在C源文件中的.h文件,它提供了几个优点。

1.-提供数据类型,全局变量,常量和函数的声明。

因此,您不必一次又一次地重写它们。如果他们需要改变,你只需要在一个文件中改变它。

在这个例子中,由两个compliation单位(两个.c文件)组成的程序编译并运行得很好。

// File funcs.c

#include

struct Position {

int x;

int y;

};

void print(struct Position p) {

printf("%d,%d\n", p.x, p.y);

}

// File main.c

struct Position {

int x;

int y;

};

int main(void) {

struct Position p;

p.x = 1; p.y = 2;

print(p);

}

但更mantainable有对struct Position声明在头文件,只是#include它无处不在,它是必要的,就像这样:

// File funcs.h

#ifndef FUNCS_H

#define FUNCS_H

struct Position {

int x;

int y;

};

#endif // FUNCS_H

//File funcs.c

#include

#include "funcs.h"

void print(struct Position p) {

printf("%d,%d\n", p.x, p.y);

}

//File main.c

#include "funcs.h"

int main(void) {

struct Position p;

p.x = 1; p.y = 2;

print(p);

2:提供某种类型的安全。

C功能implicit declaration of functions。一个在C99中修复的“特征”(或者说是一种可论证的语言设计错误)。

考虑一下这个程序的两个.c文件组成:

//File funcs.c

#include

int f(long n)

{

n = n+1;

printf("%ld\n", n);

}

// File main.c

int main(void)

{

f("a");

return 0;

}

与海湾合作委员会这个程序编译没有警告或错误。但不表现为,我们可以合理的期待和渴望:

[email protected] ~/t/tt $ gcc -o test *.c

[email protected] ~/t/tt $ ./test

4195930

使用头文件是这样的:

//File funcs.h

#ifndef FUNCS_H

#define FUNCS_H

int f(long n);

#endif // FUNCS_H

//File funcs.c

#include

int f(long n) {

n = n+1;

printf("%ld\n", n);

}

// File main.c

#include"funcs.h"

int main(void) {

f("a");

return 0;

}

程序仍然编译和工程错误的,但至少我们得到一个警告:

[email protected] ~/t $ gcc -o test *.c

main.c: In function 'main':

main.c:5:5: warning: passing argument 1 of 'f' makes integer from pointer without a cast

f("a");

^

In file included from main.c:2:0:

funcs.h:3:5: note: expected 'long int' but argument is of type 'char *'

int f(long n);

^

[email protected] ~/t $ ./test

4195930

3.-提供一个公共接口,同时让实现细节保持隐藏状态。

当你设计你的程序时,最好使它成为模块化。这是为了确保它的不同部分(模块)尽可能地独立。所以,当你需要改变一个模块时,你不必担心影响其他模块的这种改变

头部有助于做到这一点,因为你在模块头部放置了数据结构,函数原型和常量这种模块的用户将会需要它。

实现细节进入.c文件。

这就是图书馆的工作方式。 API接口被指定并分布在头文件中。但API代码在.c文件中,不需要分发。作为库的用户,您只需要头文件和编译后的库,而不是源代码。

c语言void要用什么头文件,什么是C语言头文件?相关推荐

  1. C语言 define 防止头文件重复包含 - C语言零基础入门教程

    目录 一.头文件重复包含编译器报错 1.简单的理解头文件重复包 2.老流氓的理解头文件重复包 二.通过宏定义解决头文件重复包含 1.通过 #ifndef / #define 解决头文件重复包含 2.通 ...

  2. 51单片机C语言程序100例分析(1)IO+C语言+头文件

    51单片机C语言程序100例分析(1)IO+C语言+头文件 \\\插播一条:文章末尾有惊喜哟~///  P1=0xfe;//P1=11111110B,即P1.0输出低电平} 分析:通过这短短的几行代码 ...

  3. c语言exit头文件,exit函数在那个头文件

    c语言 exit的头文件是什么? C语言exit函数的头文件是stdlib.h. exit的声明为 void exit(int value); exit的作用是,退出程序,并将参数value的值返回给 ...

  4. 【C 语言】文件操作 ( 文件加密解密 | 使用第三方 DES 加密解密库 | 头文件导入 | 兼容 C++ 语言 | 加密解密函数说明 )

    文章目录 一.导入第三方库头文件 二.头文件说明 1.兼容 C++ 语言 2.头文件导入限制 3.加密解密函数说明 一.导入第三方库头文件 对文件进行加密 , 将文件中的数据分成若干块 , 一块一块的 ...

  5. c语言编译说文件不存在,c语言编译时缺少头文件,库的解决办法

    问题产生原因 我们都知道我们写一个程序不可能所有东西都重头去开发,因此我们会使用一些其它人写好的文件或者说叫做库函数等.但是有时候因为路径的设置不对,或者是文件的丢失,或者是文件版本不对,或者是文件的 ...

  6. c语言sqlserver数据库头文件,Mysql的C语言API进行数据库编程

    数据编程基础知识,掌握C语言,熟悉简单的SQL语句,能够实现简单的增.删.查.改即INSERT.DELETE .SELECT.UPDATE语句,其中SELECT语句尤为重要,面试笔试中经常被问及.默认 ...

  7. c语言头文件命名规则,C语言头文件规则.doc

    C语言头文件规则.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文档所得收 ...

  8. c语言gets函数头文件string.h,string函数头文件

    string.h头文件中有什么函数 string.h头文件中的函数: #include //STL 通用算法 #include //STL 位集容器 #include //复数类 #include / ...

  9. c语言头文件和源文件为什么分开,C语言中为什么要头文件和源文件分开写

    对c&c++程序来说,基本上来说都是要把源文件和头文件分别编写.一般都是代表一个基本功能的源文件引用相应的头文件. 一个 相关功能的模块可能有若干对源文件和头文件组成.这是基于组件编程的核心. ...

最新文章

  1. CCNA笔记-交换机安全
  2. list-style样式不显示问题
  3. SpringBoot + Vue + nginx项目一起部署
  4. 灵魂拷问:后端业务开发要会用 K8s 到什么程度?
  5. dotnetcore Http服务器研究(一)
  6. Visual Studio 2010中C++项目升级指南
  7. InfoQ宣布成立CNUT容器技术俱乐部 欲连接中国容器社区
  8. LOAM_velodyne学习(一)
  9. .NET Core玩转机器学习
  10. js webpack 解决跨域问题_webpack-dev-server 作代理解决跨域,让你的本地开发飞起来...
  11. Makefile之自动生成依赖(8)
  12. 关于linux下的iptables 的浅析命令和了解
  13. ssh之雇员管理系统(7)-spring可以启用注解的方式来配置属性+解决懒加载问题...
  14. javascript在IE和Firefox下的不同之处
  15. Atitit 企业战略目标的艺术 目录 1. 企业战略目标 1 2.  特点 ▪ 宏观性 ▪ 长期性 ▪ 全面性 稳定性 1 3. 内容 2 3.1. 彼得·德鲁克在《管理实践》一书中提出了八个
  16. 计算机鼠标不灵活怎么办,鼠标不灵活了怎么办_鼠标突然变迟钝的解决方法
  17. C++ 获取linux和windows系统的用户名
  18. Netty高级进阶之基于Netty的Websocket开发网页聊天室
  19. 综合篇(四):Vivado中Global和Out-of-context(OOC)综合模式
  20. 如何有效防止“蹭网”——简述Wi-Fi加密方式与破解

热门文章

  1. PHP通过推广二维码追溯统计用户来源
  2. S2ANet(Align Deep Features for Oriented Object Detection)解读
  3. Edge与Safari双向同步书签
  4. LayUI实现Checkbox复选框的单选及取消单选,即只能选一个或者全都不选
  5. R语言使用rnorm函数生成正太分布数据、使用boxplot函数可视化箱图、中间黑线为中位数位置、上下框线为上下四分位数位置、上下触须为1.5倍四分位数间距、如果有孤立点表示异常值
  6. 【C/C++笔记】 C/C++常见问题笔记 1
  7. 使用腾讯云 SCF 云函数压缩 COS 对象存储文件
  8. C语言生成n个随机坐标,c语言如何生成随机数 怎样用c语言生成n个随机数?
  9. Prometheus企业级监控——理论入门
  10. Linux进程池、线程池调研