我正在清理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
相关声明的某些后果实际上取决于订单?由于中间没有代码,我不这么认为,但我不熟悉太多的细微之处......
答案 0 :(得分:1)
如果标题写得正确无关紧要。如果它们具有相互依赖性,则会产生很大的不同。
// header 1
#undef FOO
#define FOO 1
// header 2
#undef FOO
#define FOO 2
这是一个愚蠢的例子,但是如果你不小心的话,在不使用预处理器的情况下获得类似的冲突相当容易。
答案 1 :(得分:0)
只要所有包含都在#if !defined(HEADER_H_)
范围内,包含你首先放入的内容并不重要,但我喜欢将所有标准库放在第一位,但这完全取决于给你。
答案 2 :(得分:0)
#include
和using
的顺序并不重要。但这不是一个好的编程实践,因为代码变得不那么可读。所以在一个地方写下所有#include
,在一个地方写下所有名称空间。
例如:
#include "stdio.h"
#include "math.h"
using namespace std;
using namespace xyz;