1

我正在清理一个 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相关声明的某些后果实际上取决于顺序?由于两者之间没有代码,我不这么认为,但我不熟悉太多的微妙之处......

4

3 回答 3

1

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

// header 1
#undef FOO
#define FOO 1

// header 2
#undef FOO
#define FOO 2

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

于 2013-07-11T18:37:53.713 回答
0

#include's 和's的顺序using无关紧要。但这不是一个好的编程习惯,因为代码变得不那么可读了。所以把所有的#include's 写在一个地方,把所有的命名空间写在一个地方。

前任:

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

using namespace std;
using namespace xyz;
于 2013-07-11T18:48:43.940 回答
0

只要所有的包含都在里面,你把哪个包含放在第一位并不重要#if !defined(HEADER_H_),但我喜欢把我所有的标准库放在第一位,但这完全取决于你。

于 2013-07-11T18:33:44.880 回答