当前位置:C++技术网 > 资讯 > 新手编写头文件(仅适新手)

新手编写头文件(仅适新手)

更新时间:2015-06-26 14:34:53浏览次数:1+次

    学了好久的C语言,自学了有一段时间的C++,有一点感觉,什么是头文件?头文件该怎么用?对新手来说是很大的问题吧,肯定很多人很晕很晕的感觉,问老师的时候,老师也只说“代码复用性考虑”,它为什么增强代码复用性?原理是什么?什么时候应该用头文件?这些问题我相信很多人不太好回答,就好比“1 + 1 为什么等于 2 ?”,当然对老手来说,头文件“就是那么回事”,具体是“怎么回事呢?”,我解释一下(个人观点!如有错误之处,敬请指点!):
1.头文件是干啥的?
    简单地说,头文件就是一个人的头部,掌控着所有程序的核心,所以英文名叫做“head_file”,从名字可以看出来它的重要性,里面放置了很多函数,比如<stdio.h><cstdlib><cstring>,比如printf,sizeof,strlen这些函数在头文件都可以找到定义,没错!是定义!定义函数用的。(我认为这个太常用了,别的功能本人能力有限,不了解)
2.头文件怎么用?
    通常自定义的函数都是有一个配套的.cpp文件,比如我写了一个 my_head.h文件,定义了一个my_function ()函数,我下一步该干什么呢?我应该写一个新的my_head.cpp文件,为什么是my_head.cpp 这个名字呢?这是为了方便查找,如果你起了一个别的名字,当别人看你的代码的时候,他想要找到你的实现文件是不是很痛苦?所以为了别人方便,更为了自己方便,起一个和头文件差不多的名字,很方便,让别人一看就知道这两个文件有很大的相关性,好比是“双胞胎”(不太恰当的比喻)。这就是关于头文件名字的命名的原因吧!
    然后说说头文件该怎么用呢?比如我写了一个 my_head.h 头文件,里面我应该怎么写?前两行一般来说是这样写的:

#ifndef _MY_HEAD_H_
#define _MY_HEAD_H_
     为什么这样写呢?#ifndef是什么意思呢?全称叫做: if not define 这是一个缩写!叫做如果没有定义 _MY_HEAD_H_,为什么这个_MY_HEAD_H_怎么这么多的下划线呢?很简单,这是为了防止重复用的,当头文件很多的时候,你的程序和别人的程序放在一起的时候,容易和别人的标志重复,两侧放下划线应该是为了美观吧(个人理解,或是别的什么吧)。
    为什么用 ifndef 呢?为了防止重复定义的,如果你已经 #include"my_head.h"了,你在包含一次,程序会出错的,所以才会用这个函数。
    我该怎么定义函数呢?这个很简单,比如:

#ifndef _MY_HEAD_H_
#define _MY_HEAD_H_

void my_function ();//自定义的函数 my_function

#endif //为了告诉编译器头文件的包含到此为止(仅仅是针对此文件 my_head.h 类似的模式的文件)

    下一步建立一个新文件my_head.cpp,来实现我的函数my_function (),我应该怎么写呢?首先我要包含进来我写完的头文件吧?

#include"my_head.h"

void my_function () //简单的函数实现就完成了。。。
{
    cout << "hello,I am a function where defined by my_head.h" << endl; //C++版本
    printf ("hello,I am a function where defined by my_head.h\n");    //C版本(看不懂C++的cout就看这个)
}

    下一步,我的主函数该怎么写呢?头文件写好了,我就要应用,所以:

/*******C++版本*******/
#include<iostream> //这是肯定用的,不解释
#incldue"my_head.h" //双引号表示我们告诉编译器在当前文件夹下寻找这个头文件,尖括号表示在标准库中寻找头文件
using namespace std;//使用 std这个名字空间,std是 standard的缩写,指的是标准输入输出名字空间
int main ()
{
    my_function ();//调用写好的那个自定义函数
    return 0;
}
/*******C版本*******/
#include<stdio.h> //这是肯定用的,不解释
#incldue"my_head.h" //双引号表示我们告诉编译器在当前文件夹下寻找这个头文件,尖括号表示在标准库中寻找头文件

int main ()
{
    my_function ();//调用写好的那个自定义函数
    return 0;
}

    说明一点!!!本文针对新手,老手不必看!!!如有错误,敬请指点,谢谢!