我们在使用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. 命令行创建Android应用,生成签名,对APK包签名并编译运行

    一.命令行创建Android应用 android create project -n HelloWorld -t android-22 -p HelloWorld1 -k org.crazyit.he ...

  2. ubuntu下aircrack-ng的wifi破解

    首先安装aircrack-ng,apt-get install aircrack-ng. 然后打开shell,输入airmon-ng start wlan0. 输入airodump-ng mon0. ...

  3. 【html】【21】高级篇--搜索框

    下载: http://www.xwcms.net/js/bddm/25368.html 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...

  4. springmvc(五)----异常处理

    总结

  5. 第32条:用EnumSet代替位域

    如果一个枚举类型的元素主要用在集合中,一般使用int枚举模式,将2的不同倍数赋予每个常量: public class Text { public static final int STYLE_BOLD ...

  6. iOS 分类思想(2)

    /******************* NSString+NumCount.h文件 ******************************/ #import <Foundation/Fo ...

  7. ASP.NET取得Request URL的各个部分

    我們在開發網頁應用程式,時常需要去解析網址(Request.Url)的每個片段,進行一些判斷.例如說 "http://localhost:1897/News/Press/Content.as ...

  8. 一个基本jquery的评论留言模块

    <div class="productDiscuss"> <div class="title"><span class=" ...

  9. 解决 IE 不支持 document.getElementsByClassName() 的方法

    //create method getElementsByClassName for document if(!document.getElementsByClassName){ document.g ...

  10. 简单重置Centos服务器中Mysql的root密码

    1.编辑MySQL配置文件my.cnf vi /etc/my.cnf #编辑文件,找到[mysqld],在下面添加一行skip-grant-tables [mysqld] skip-grant-tab ...