我们在使用c编程的时候经常会遇到头文件,前段时间我自己做了个小项目的时候,也遇到了关于头文件的问题。

预处理器发现#include 指令后,就会寻找后跟的文件名并把这个文件包含的内容包含到当前文件中。被包含文件的文本将替换源文件中的#include 指令,就像您把被包含文件中的全部内容键入到源文件的特定位置一样(摘抄自 cprimer plus)。简单来说就是,编译器把 #include 后跟随的文件内容都写到源文件中,写的位置就是 #include放的位置。

#include指令有两种形式

1:#include<stdio.h>  文件名放在尖括号里面

在unix系统中,尖括号告诉预处理器在一个活多个标准的目录中寻找文件。如果做开发,比如,我使用keil和mdk,编译器也遵循这样的原则,放在默认目录中,不用人工处理。

2:#include”mystuff.h” 文件名放在双引号中

有两种形式:

<1>:#include”hot.h”收索当前的工作目录

<2>:#include”/usr/biff/p.h”收索/usr/biff所在的目录

对于unix系统,使用双引号意味着先搜索本地目录,但是具体收索那个牡蛎依赖于编译器。有些编译器收索源代码所在的目录,还有些收索工程文件所在的目录。

对于我使用的mdk,我是将文件所在的文件夹添加到工程能够搜索的目录中。

在写c程序的时候,我们经常会把函数写在一个.c文件中,然后在另外的.c文件中引用函数,使得整个程序更加整洁,方便。

但是在头文件使用的时候经常出现重定义的错误,我使用的解决办法是:

首先把hello.c拆分为两个文件hello.c和hello.h。hello.h中包含hello.c所需要的头文件和.c中出现的函数名。例如在hello.c中有

void add (int x,int y)

{

z=x+y;

return y;

}

就在hello.h中添加 void add(int x,int y);和hello.c所需的头文件#include<stdio.h>

在拆分后的hello.c添加#include”hello.h”,然后把hello.c和hello.h放在同一个文件夹即可。当有文件需要add函数时直接在头文件中添加#include”hello.h”即可。

当多个文件引用hello.h时候,例如当plus.c中引用hello.c,jump.c需要使用plus.c和add.c。就会出现重定义的错误(引用hello.c和plus是z指将hello.h和plus.h头文件添加到jump.c中)

这时候就引用防重定义。假设要放重引用hello.h  在开头添加

#ifndef __HELLO_H__

#define __HELLO_H__

结尾添加

#endif

既把你要重定义的文件的开头添加

#ifndef __HELLO_H__

#define __HELLO_H__

HELLO就是你文件的名字改成大写 H就是你文件类型

再在结尾加上

#endif

即可。

正确使用c语言中的头文件的更多相关文章

  1. C语言中的头文件

    1.头文件#include <> :表示引用标准库头文件,编译器会从系统配置的库环境中去寻找 2.头文件#include "":一般表示用户自己定义使用的头文件,编译器 ...

  2. 转:C语言中的头文件可以自己写吗?

    转自:http://www.eefocus.com/computer00/blog/08-09/155791_9ebdc.html 一些初学C语言的人,不知道头文件(*.h文件)原来还可以自己写的. ...

  3. 整理一下C++语言中的头文件

    对于每一个像我一样的蒟蒻来说,C++最重要的东西就是头文件的使用了.由于初学,直到现在我打代码还是靠一些事先写好的的头文件,仍然不能做到使用自己需要的.最近看了几位大佬打代码,心中突然闪过要把自己冗长 ...

  4. 理解C++中的头文件和源文件的作用【转】

    一.C++编译模式通常,在一个C++程序中,只包含两类文件--.cpp文件和.h文件.其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码:而.h文件则被称作C++头文件,里面放的也是C+ ...

  5. Python Cookbook(第3版)中文版:15.19 从C语言中读取类文件对象

    15.19 从C语言中读取类文件对象¶ 问题¶ 你要写C扩展来读取来自任何Python类文件对象中的数据(比如普通文件.StringIO对象等). 解决方案¶ 要读取一个类文件对象的数据,你需要重复调 ...

  6. Windows 驱动程序工具包中的头文件

    MSDN原文:https://msdn.microsoft.com/zh-cn/library/windows/hardware/ff554695(v=vs.85).aspx Windows 驱动程序 ...

  7. MinGW中的头文件路径级环境变量设置

    整理自 MinGW中的头文件路径   C头文件目录%MINGW_PATH%/include下有头文件,里面有strcpy等c函数的声明. C++头文件目录%MINGW_PATH%/lib/gcc/mi ...

  8. C++的IO处理中的头文件以及类理解(2)<sstream>头文件

    C++的IO处理中的头文件以及类理解(2)<sstream>头文件 头文件<sstream>中定义的类型都继承iostream头文件中定义的类型.除了继承得来的操作,sstre ...

  9. VC中添加头文件以及库

    原文:http://blog.csdn.net/lwb102063/article/details/52068389   附加头文件包含 VC6.0中: VC6.0默认include包含路径:Tool ...

随机推荐

  1. 关于sql row_number,rank,dense_rank,ntile函数

    row_number排序最好用它,它依次排名,不出现相同名次,如:1,2,3,4,5 rank出现相同排名,且跳过相同的排名号排下一名,如:1,1,3,4,5, dense_rank出现相同排名,不跳 ...

  2. VBA实现随意输入组合码,查询唯一标识码

    记录背景: 需要在excel中查询出组合码,对应的唯一标识码. 举例 组合码:4+5+6+9+1*2   标识码:A1 界面随意输入组合码:1*2+4+5+6+9  输出标识码:A1 VBA实现: P ...

  3. ajax跨域请求的解决方案

    一直打算改造一下自己传统做网站的形式. 我是.Net程序员,含辛茹苦数年也没混出个什么名堂. 最近微信比较火, 由于现在大环境的影响和以前工作的总结和经验,我打算自己写一个数据,UI松耦合的比较新潮的 ...

  4. CSS FIXED porn javhd

    CSS position property - W3Schools W3Schools › cssref › pr_class_position Definition and Usage. The p ...

  5. The method getContextPath() is undefined for the type ServletContext

    我出错时,到网上说得是版本问题,我找到对应的包javax-servlet5.1.12.jar,把它删了,居然不报错了,原来是和包servlet-2_5-api.jar冲突了

  6. 13_CXF和Spring整合发布服务

    [服务端] 第一步:建立一个Web项目 第二步:填充CXF jar包 第三步:创建接口及服务类 [工程截图(对比之前的WebService_CXF_Server00)] [applicationCon ...

  7. JS中undefined和null的区别

    在写JS脚本的时候,经常会碰到“为空”的判断,其中主要有null和undefined的判断.这两个为空判断的主要区别是: 1) null是JS的关键字,是语法特性.undefined是全局对象的属性, ...

  8. C#调用金数据API

    首先,吐槽一下金数据的API文档 http://help.jinshuju.net/articles/api-intro.html写的很粗糙啊...反正我是没太看明白 拿表单api举例,只告诉你了个地 ...

  9. Android分类前言

    柚子园项目搁置后,半年多时间里都在开发微信公众平台和在公司实习,用的都是python,django,bottle,已经很久没有开发android了.技术的东西,不用就容易生疏甚至忘掉.刚好现在需要写毕 ...

  10. C语言的数据类型

    复习之余,做点笔记<C语言之数据类型> 一.整数数据类型 (1)整数数据类型 整数类型 char 字符型变量   1字节(8Bit) short 短整型      2字节(16Bit) i ...