头文件保护符&头文件中的“”和<>
参考:
#pragma once
wiki:include guard
头文件保护符
在C++中我们写头文件时经常需要#include来包含其他头文件。头文件定义的实体经常使用其他头文件的内容,有时候会出现一个头文件被多次包含进同一源文件。
例如
1.有一个头文件log.h(其中定义了一个struct),如果在一个cpp文件中多次包含此头文件,会出现重复定义的情况。
2.有一个头文件log.h(其中定义了一个struct),另一个头文件test.h((其中定义了一个struct))包含了log.h,如果在一个cpp文件中包含这两个头文件,则会出现重复定义的情况。
#pragma once
这种方式是C++ 11新标准中的一部分
基本上为所有编译器支持,而且比下面这种方式更加高效。
#ifndef XXX
#define XXX
#endif
测试代码:
log.h
//#pragma once
struct Haha{
};
test.cpp
#include "log.h"
#include "log.h"
using namespace std;
int main()
{
return 0;
}
error
redefinition of 'struct Haha’
常规方法(#ifndef…)
测试代码:
log.h
#ifndef _LOG_
#define _LOG_
struct Haha{
};
#endif // _LOG_
test.cpp
#include "log.h"
#include "log.h"
using namespace std;
int main()
{
return 0;
}
error
redefinition of 'struct Haha’
头文件包含
头文件包含一般有两种方式,“ ”和< >
这两种方式的区别:
#include <iostream> //库提供的头文件
#include "../iostream" //库提供的头文件,包含路径
//Log.h为用户自定义头文件
#include <Log.h>
#include "Log.h"
#include "../Log.h"
一般来说,<>用于标准头文件的使用,直接使用头文件名即可。
" "可以用于用户自定义头文件的使用,可以包含路径。
" "应用的范围更广,既可以是标准头文件,也可以是自定义头文件。既可以直接包含文件名,也可以设置路径。