c++如何定义头文件

来源:百度知道 编辑:UC知道 时间:2024/06/07 23:58:08
#ifndef TIME_H //为何要有这句,网上说是防止重复引用,如果重复引用会如何,一定要吗?
#define TIME_H //这句话是什么意思,有何用?
class Time
{
...代码...
};
#endif

#ifndef TIME_H //if not define,如果没有被引用过,因为如果要使用很多.h肯定会有重复引用同一头文件的,如果重复引用,例如一个#include"x.h";#include<x.h>,可能会引用到2个相同文件名但是是不同函数的头文件,电脑就不知道应该用哪里的函数,必然会出错,所以要判断一下有没有重复引用;与#endif呼应

例如系统下有一个f.h里有一个函数int f(int){return 0;};工程文件夹(workspace)下有一个自己编译的f.h也有一个函数int f(int) {return 1;};那如果在main.cpp里#include"f.h";#include<f.h>;(注意先后),在使用f(a)时应该调用哪个函数呢?

#define TIME_H //如果没有引用过,就定义一个TIME_H头文件

上面回答纯祽胡诌!
那有“2个相同文件名但是是不同函数的头文件”?不同的头文件里面define的宏肯定不同,要是有两个不同文件,你如果要包含他们,他们彼此肯定不会影响,
用“”和<>包含的唯一区别是搜索路径不同,<>只搜索系统包含路径
首先看重复引用的情况,举个例子很容易看明白
如有1.h;2.h;3.h;4.h共4个头文件。2,3都包含1,4包含2,3。这样如果不加控制,最后4里面相当于包含了1两次。如果里面有结构或类定义,编译器就会报错:重定义。
再来看如何避免重复引用的。#ifndef #endif叫预编译指令,也就是在实际把程序送入编译器前对源代码进行处理的指令。
当头文件第一次被包含时你定义的TIME_H 还一次也没有被定义过,因此整个头文件都会被包含近来。而第二次包含时,由于TIME_H 已经在上次包含时被定义了,#ifndef判断失败了,被包含在#ifndef和#endif之间内容就被排出在外了。这样最后被送入编译器的源代码,只包含头文件的内容一次。
明白这个原理后,你也就明白了为什么不同的头文件必须定义不同的宏了:否则它们就会互相排斥了

用#include<>包含