嵌入式linux头文件,飞凌嵌入式知识汇092期:C工程的组织方式(头文件的功能)以及Linux下常用的头文件的作用...

1.1每个C++/C程序通常分为两个文件。一个文件用于保存程序的声明(declaration),称为头文件。另一个文件用于保存程序的实现(implementation),称为定义(definition)文件。

C++/C程序的头文件以“.h”为后缀,C程序的定义文件以“.c”为后缀,C++程序的定义文件通常以“.cpp”为后缀(也有一些系统以“.cc”或“.cxx”为后缀)。1

版权和版本的声明

版权和版本的声明位于头文件和定义文件的开头(参见示例1-1),主要内容有:

(1)版权信息。

(2)文件名称,标识符,摘要。

(3)当前版本号,作者/修改者,完成日期。

(4)版本历史信息。

示例1-1 版权和版本的声明

1.2 头文件的结构

头文件由三部分内容组成:

(1)头文件开头处的版权和版本声明(参见示例1-1)。

(2)预处理块。

(3)函数和类结构声明等。

假设头文件名称为 graphics.h,头文件的结构参见示例1-2。

【规则1-2-1】为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块。

【规则1-2-2】用 #include 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。

【规则1-2-3】用 #include “filename.h”

格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索)。

【建议1-2-1】头文件中只存放“声明”而不存放“定义”

在C++

语法中,类的成员函数可以在声明的同时被定义,并且自动成为内联函数。这虽然会带来书写上的方便,但却造成了风格不一致,弊大于利。建议将成员函数的定义与声明分开,不论该函数体有多么小。

【建议1-2-2】不提倡使用全局变量,尽量不要在头文件中出现象extern int value 这类声明。

基本结构如下:

(1)头文件注释(包括文件说明、功能描述、版权声明等)(必须有);

(2)内部包含卫哨开始(#ifndef XXX/#define XXX)(必须有);

(3)#include其他头文件(如果需要);

(4)外部变量和全局函数声明(如果需要);

(5)常量和宏定义(如果需要);

(6)类型前置声明和定义(如果需要);

(7)全局函数原型和内联函数的定义(如果需要);

(8)内部包含卫哨结束:#endif // XXX(必须有);

(9)文件版本及修订说明。

// 版权和版本声明见示例1-1,此处省略。

#ifndef GRAPHICS_H // 防止graphics.h被重复引用

#define GRAPHICS_H

#include // 引用标准库的头文件

#include “myheader.h” // 引用非标准库的头文件,

void Function1(…); // 全局函数声明

class Box // 类结构声明

{

};

#endif

附:extern全局变量的使用方法

<1>对变量而言,如果你想在本源文件中使用另一个源文件的变量,就需要在使用前用extern声明该变量,或者在头文件中用extern声明该变量;

<2>对函数而言,如果你想在本源文件中使用另一个源文件的函数,就需要在使用前用声明该变量,声明函数加不加extern都没关系,所以在头文件中函数可以不用加extern。

示例1-2 C++/C头文件的结构

1.3 定义文件的结构

定义文件有三部分内容:

(1) 定义文件开头处的版权和版本声明(参见示例1-1)。

(2) 对一些头文件的引用。

(3) 程序的实现体(包括数据和代码)。

假设定义文件的名称为 graphics.cpp,定义文件的结构参见示例1-3。

// 版权和版本声明见示例1-1,此处省略。

#include “graphics.h” // 引用头文件

// 全局函数的实现体

void Function1(…)

{

}

// 类成员函数的实现体

void Box::Draw(…)

{

}

示例1-3 C++/C定义文件的结构

1.4 头文件的作用

早期的编程语言如Basic、Fortran没有头文件的概念,C++/C语言的初学者虽然会用使用头文件,但常常不明其理。这里对头文件的作用略作解释:

(1)通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。

(2)头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。

Linux下常用的头文件及其类型

-------------------------

linux常用头文件如下:

POSIX标准定义的头文件

目录项

文件控制

文件名匹配类型

路径名模式匹配类型

组文件

网络数据库操作

口令文件

正则表达式

TAR归档值

终端I/O

符号常量

文件时间

字符扩展类型

-------------------------

INTERNET定义

套接字本地接口

INTERNET地址族

传输控制协议定义

------------------------- 内存管理声明

Select函数

套接字借口

文件状态

进程时间

基本系统数据类型

UNIX域套接字定义

系统名

进程控制

------------------------------

POSIX定义的XSI扩展头文件

cpio归档值 动态链接

消息显示结构

文件树漫游

代码集转换使用程序

语言信息常量

模式匹配函数定义

货币类型

数据库操作

消息类别

轮询函数

搜索表

字符串操作

系统出错日志记录

用户上下文

用户限制

用户帐户数据库 -----------------------------

IPC(命名管道)

消息队列

资源操作

信号量

共享存储

文件系统信息

时间类型

附加的日期和时间定义

矢量I/O操作

------------------------------

POSIX定义的可选头文件

异步I/O

消息队列

线程

执行调度

信号量

实时spawn接口

XSI STREAMS接口

事件跟踪

3、 C/C++头文件一览

C

#include     //设定插入点

#include      //字符处理

#include      //定义错误码

#include      //浮点数处理

#include  //对应各种运算符的宏

#include     //定义各种数据类型最值的常量

#include     //定义本地化C函数

#include      //定义数学函数

#include  //异常处理支持

#include  //信号机制支持

#include  //不定参数列表支持

#include  //常用常量

#include      //定义输入/输出函数

#include     //定义杂项函数及内存分配函数

#include     //字符串处理

#include      //定义关于时间的函数

#include      //宽字符处理及输入/输出

#include     //宽字符分类

传统C++

#include     //改用

#include     //改用

#include    //改用

#include    //该类不再支持,改用中的stringstream

————————————————————————————————

标准C++

#include     //STL 通用算法

#include      //STL 位集容器

#include //字符处理

#include      //定义错误码

#include      //浮点数处理

#include //对应各种运算符的宏

#include     //定义各种数据类型最值的常量

#include     //定义本地化函数

#include      //定义数学函数

#include      //复数类

#include //信号机制支持

#include //异常处理支持

#include //不定参数列表支持

#include //常用常量

#include      //定义输入/输出函数

#include     //定义杂项函数及内存分配函数

#include     //字符串处理

#include      //定义关于时间的函数

#include      //宽字符处理及输入/输出

#include     //宽字符分类

#include       //STL 双端队列容器

#include     //异常处理类

#include     //文件输入/输出

#include    //STL 定义运算函数(代替运算符)

#include      //定义各种数据类型最值常量

#include       //STL 线性列表容器

#include //本地化特定信息

#include //STL 映射容器

#include //STL通过分配器进行的内存分配

#include //动态内存分配

#include //STL常用的数字操作

#include     //参数化输入/输出

#include        //基本输入/输出支持

#include      //输入/输出系统使用的前置声明

#include     //数据流输入/输出

#include      //基本输入流

#include //STL迭代器

#include      //基本输出流

#include       //STL 队列容器

#include        //STL 集合容器

#include      //基于字符串的流

#include       //STL 堆栈容器

#include     //标准异常类

#include     //底层输入/输出支持

#include      //字符串类

#include //运行期间类型信息

#include      //STL 通用模板类

#include //对包含值的数组的操作

#include      //STL 动态数组容器

————————————————————————————————

C99增加的部分

#include    //复数处理

#include     //浮点环境

#include   //整数格式转换

#include    //布尔环境

#include    //整型环境

#include    //通用类型数学宏 欢迎关注飞凌嵌入式微信公众平台:a4c26d1e5885305701be709a3d33442f.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值