我们在使用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. 使用struts+spring+hibernate组装web应用

    这篇文章将讨论怎样组合几个着名的框架去做到松耦合的目的,怎样建立你的构架,怎样让你的各个应用层保持一致.富于挑战的是:组合这些框架使得每一层都以一种松耦合的方式彼此沟通,而与底层的技术无关.这篇文章将 ...

  2. iOS 返回到指定的ViewController

    for (UIViewController *vc in self.navigationController.viewControllers) { if ([vc isKindOfClass:[MyV ...

  3. C#5.0之后推荐使用TPL(Task Parallel Libray 任务并行库) 和PLINQ(Parallel LINQ, 并行Linq). 其次是TAP(Task-based Asynchronous Pattern, 基于任务的异步模式)

    学习书籍: <C#本质论> 1--C#5.0之后推荐使用TPL(Task Parallel Libray 任务并行库) 和PLINQ(Parallel LINQ, 并行Linq). 其次是 ...

  4. android 权限总结

    1.拨打电话要权限 2.sd目录存东西要权限

  5. C语言中的%0nd,%nd,%-nd

    C语言中的%0nd printf --> formatted print/格式化输出 一.十进制 d -> decimal/十(shí)进制 int a=1; int b=1234; do ...

  6. springmvc学习(五)——处理模型数据

    Spring MVC 提供了以下几种途径输出模型数据: ModelAndView: 处理方法返回值类型为 ModelAndView 时, 方法体即可通过该对象添加模型数据Map 及 Model: 入参 ...

  7. CICS定时

    F+14个0-----给CICS传参数FM CICSServer svr;        svr.GetRetCommData(&pMsgStr, &chMsgType); CICSS ...

  8. win/linux 下使用 psutil 获取进程 CPU / memory / IO 占用信息

    psutil - A cross-platform process and system utilities module for Python 1. 安装 pip 安装即可. windows 下需要 ...

  9. mysql show processlist 显示mysql查询进程

    1.进入mysql/bin目录下输入mysqladmin processlist; 2.启动mysql,输入show processlist; 如果有 SUPER 权限,则可以看到全部的线程,否则,只 ...

  10. 轻松解决fedora21装完NVIDIA显卡驱动后无法进入gnome问题

    本来打算昨天写的,最近感冒了,打点滴,耽搁了! 我用的是联想14寸笔记本,装好了fedora21后,想装个NVIDIA显卡驱动试试,结果和很多人一样无法进入gnome界面,搞了三四个小时终于搞定.下面 ...