#include指令和“using”语句的顺序在C ++头文件的开头是否重要?

时间:2013-07-11 18:28:03

标签: c++ include header-files declaration using

我正在清理C ++头文件并注意到以下内容:

#if !defined(HEADER_H_)
#define HEADER_H_

#include <vector>
#include <string>

using namespace std;

#include<stdio.h>

#include "Blar/ObjA/Model.h"

namespace blar{
  class Blar;
}

#include <Blar/Blar.h>
#include <Blar/ObjB/OtherModel.h>

using namespace blar;

#include <Utilities/OtherThing.h>  
#include <qstringlist.h>

这只是不好的做法,还是每个#include/using/namespace相关声明的某些后果实际上取决于订单?由于中间没有代码,我不这么认为,但我不熟悉太多的细微之处......

3 个答案:

答案 0 :(得分:1)

如果标题写得正确无关紧要。如果它们具有相互依赖性,则会产生很大的不同。

// header 1
#undef FOO
#define FOO 1

// header 2
#undef FOO
#define FOO 2

这是一个愚蠢的例子,但是如果你不小心的话,在不使用预处理器的情况下获得类似的冲突相当容易。

答案 1 :(得分:0)

只要所有包含都在#if !defined(HEADER_H_)范围内,包含你首先放入的内容并不重要,但我喜欢将所有标准库放在第一位,但这完全取决于给你。

答案 2 :(得分:0)

#includeusing的顺序并不重要。但这不是一个好的编程实践,因为代码变得不那么可读。所以在一个地方写下所有#include,在一个地方写下所有名称空间。

例如:

#include "stdio.h"
#include "math.h"

using namespace std;
using namespace xyz;