如何按顺序包含header?
How to include header in order?
我有一个包含许多 header 文件的 OpenGL 项目。我使用 GLEW 库,我的 Main.cpp
是这样开始的:
// use GLEW as static lib requires GLEW_STATIC
#define GLEW_STATIC
#include <GL/glew.h>
// ...
有报错:
GL/glew.h(85): fatal error C1189: #error: gl.h included before glew.h
所以我需要在包含 gl.h
的任何其他 header 之前包含 GL/glew.h
。所以我在每个 header:
中添加这些行
#ifndef GLEW_INCLUDED
#define GLEW_STATIC
#include <GL/glew.h>
#define GLEW_INCLUDED
#endif
我必须修改每个 header,似乎是 "dirty" 的工作。有什么干净的方法可以做到这一点吗?
干净的方法是锻炼 self-control。或者更重要的是,停止包括 gl.h
。如果您使用 OpenGL loading library,那么它会控制您对 OpenGL 的访问。让它完成它的工作,只包含它的 headers.
所以不需要GLEW_INCLUDED
。
至于 GLEW_STATIC
,这是您在命令行中添加到构建系统的定义,而不是您使用的每个文件。就像您没有定义 NDEBUG
或其他类似定义一样。
我有一个包含许多 header 文件的 OpenGL 项目。我使用 GLEW 库,我的 Main.cpp
是这样开始的:
// use GLEW as static lib requires GLEW_STATIC
#define GLEW_STATIC
#include <GL/glew.h>
// ...
有报错:
GL/glew.h(85): fatal error C1189: #error: gl.h included before glew.h
所以我需要在包含 gl.h
的任何其他 header 之前包含 GL/glew.h
。所以我在每个 header:
#ifndef GLEW_INCLUDED
#define GLEW_STATIC
#include <GL/glew.h>
#define GLEW_INCLUDED
#endif
我必须修改每个 header,似乎是 "dirty" 的工作。有什么干净的方法可以做到这一点吗?
干净的方法是锻炼 self-control。或者更重要的是,停止包括 gl.h
。如果您使用 OpenGL loading library,那么它会控制您对 OpenGL 的访问。让它完成它的工作,只包含它的 headers.
所以不需要GLEW_INCLUDED
。
至于 GLEW_STATIC
,这是您在命令行中添加到构建系统的定义,而不是您使用的每个文件。就像您没有定义 NDEBUG
或其他类似定义一样。