• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C语言编程入门之程序头文件的简要解析

C语言编程入门之程序头文件的简要解析

作者:fushiqianxun 字体:[增加 减小] 来源:互联网 时间:2017-05-28

fushiqianxun 通过本文主要向大家介绍了c语言编程入门教程,c语言编程入门自学,c语言编程入门视频,c语言编程入门,c语言编程入门书籍等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

头文件是扩展名为.h的文件,其中包含C函数的声明和宏定义,也可以多个源文件之间共享。有两种类型的头文件:程序员编写的文件,和编译器中附带的文件。

要求使用头文件的程序,包括通过它,使用C语言预处理指令#include就像所看到的包含stdio.h头文件,它随着编译器自带。

包括一个头文件等于复制头文件的内容,但我们不这样做,因为这很容易出错,一个好主意是我们不复制头文件的内容,特别是包括多个程序的源文件。

在C或C++程序的简单做法是,我们把所有的常量,宏全系统全局变量和函数原型在头文件,其中包括只要它要求包含头文件。

包括/函语法
用户和系统头文件使用预处理指令#include包括在内。它有以下两种形式:

#include <file>
</div>

这种形式被用于系统头文件。它会搜索系统目录的标准列表中指定的文件的文件。可以在前面加上目录到这个列表-I选项在编译源代码。

#include "file"
</div>

这种形式是用于自己的程序的头文件。它会搜索包含当前文件的目录中的文件命名的文件。可以在前面加上目录到这个列表-I选项在编译源代码。

包括/函操作
#include指令的工作原理是指导C预处理器使用当前的源文件的其余部分,然后再继续扫描指定的文件作为输入。从预处理器的输出包含后跟来自于#include指令后的文本的输出已生成输出,随后从所包含的文件所得的输出。例如,如果有一个头文件 header.h 如下:

char *test (void);
</div>

主程序调用使用头文件,类似 program.c 这样:

int x;
#include "header.h"

int main (void)
{
  puts (test ());
}

</div>

编译器会看到同样数据流,因为它会如果program.c读取

int x;
char *test (void);

int main (void)
{
  puts (test ());
}

</div>

一次性头文件
如果头文件恰好被包含两次,编译器将处理它的内容两次,将导致一个错误。使用标准方法以防止包围文件的全部内容在一个条件,是这样的:

#ifndef HEADER_FILE
#define HEADER_FILE

the entire header file file

#endif

</div>

此构建体通常被称为包装#ifndef。当该头被再次包含,条件将是假的,因为HEADER_FILE定义。预处理器将跳过该文件的全部内容,而编译器不会看到它的两次。

计算包函
有时,有必要选择的几个不同的一个头文件被包含到程序中。它们可能会指定的配置参数被用于对不同类型的操作系统,例如。可以用一系列条件句做到这一点,如下所示:

 #if SYSTEM_1
  # include "system_1.h"
#elif SYSTEM_2
  # include "system_2.h"
#elif SYSTEM_3
  ...
#endif
</div>

但是,随着它的内容增长就会变得单调乏味,代替预处理器提供了使用宏的头文件名。这就是所谓的计算包括。而不是写一个头文件名#include直接参数,只需把宏的名字代替:

 #define SYSTEM_H "system_1.h"
 ...
 #include SYSTEM_H
</div>

SYSTEM_H将被扩展,而预处理器将寻找system_1.h仿佛的#include已经写了原来的方式。 SYSTEM_H可以通过Makefile -D选项定义。


关于头文件重复包含
1、如果头文件A包含头文件C,同时头文件B也包含头文件C,而写的程序中包含了头文件A,头文件B,然后在编译的时候就会出现头文件C重复包含的错误
这个错误 只要在自己写的头文件中这样写

#ifndef X  //X为你的标识符,保持唯一,可以长点,比如 #ifndef _INCLUDE_XXXXXX_H_
#define X

//这里是你的头文件

#endif

</div>

上面的X可以随便取名(可以用来“装”头文件,所以X一般取名为大写的头文件的名字,只不过把"."换成“_”),只要保证#ifndef和#define后面是同一个X就可以了,只是一个标识而已。翻译成中文就是,如果已经#define X了,后面的就不执行了。这样在同一个c文件中,保证可以只#include一个头文件,避免“在同一个c文件中对一个头文件include两次”的错误(第一次包含了该头文件后,就已经#define 了一次X,第二次包含时会遇到“#ifndef X”的判断,既然已经定义,只好对这个判断说yes了,后面的不再执行,
头文件就不会再加进去)。

2、写的代码里, 头文件A需要包含头文件B,头文件B需要包含头文件C,这种情况#include A就没有问题,不会出现重复包含的错误

注意:这里的#ifndef预处理是要解决在同一个c文件中包含了两次同一个头文件的错误,而在不同的c文件中是可以包含同一个头文件的。

如果不用#ifndef来对头文件做标记,又想“一劳永逸”地解决问题,不需要担心重复包含,则就要形成自觉,不要在头文件里定义变量或函数,只声明,这样多次include这个头文件时包含的都是声明,就没有问题,因此c语言里是允许多次声明同一个函数或变量的。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C语言编程入门之程序头文件的简要解析
  • C语言编程中实现二分查找的简单入门实例
  • C语言编程中生成随机数的入门教程
  • C语言编程中统计输入的行数以及单词个数的方法
  • C语言编程中借助pthreads库进行多线程编程的示例
  • C语言编程中对目录进行基本的打开关闭和读取操作详解
  • C语言编程中从密码文件获取数据的函数总结
  • C语言编程中分配内存空间的相关函数
  • C语言编程中建立和解除内存映射的方法
  • C语言编程时常犯十八个错误小结

相关文章

  • 2017-05-28文件编译时出现multiple definition of 'xxxxxx'的具体解决方法
  • 2017-05-28使用C语言判断英文字符大小写的方法
  • 2017-05-28C++中const的用法详细总结
  • 2017-05-28用C实现添加和读取配置文件函数
  • 2017-05-28C++实现简单的学生管理系统
  • 2017-05-28深入讲解C++数据类型转换的相关函数的知识
  • 2017-05-28详解C语言的结构体中成员变量偏移问题
  • 2017-05-28Microsoft Visual C++ 程序的部署方法
  • 2017-05-28浅析char 指针变量char *=p 这个语句的输出问题
  • 2017-05-28去掉vs2010中ipch文件和.sdf文件的解决方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C语言中对文件最基本的读取和写入函数
    • 基于atoi()与itoa()函数的内部实现方法详解
    • 解析C++编程中的选择结构和switch语句的用法
    • C语言转义字符
    • C++多重继承与虚继承分析
    • C++中的局部变量、全局变量、局部静态变量、全局静态变量的区别
    • Qt定时器和随机数详解
    • C++标准之(ravalue reference) 右值引用介绍
    • C语言演示对归并排序算法的优化实现
    • static_cast,dynamic_cast,reinterpret_cast,const_cast的区别及用法详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有