我最近在某人的opengl着色器类中遇到过这种代码,并且不确定它的用途。
正如我从阅读IBM's documentation中理解的那样,#define ONEWORD将删除后续文本中出现的任何ONEWORD。
如果删除所有事件,在此代码中使用ONEWORD的目的是什么?在类关键字之后但在类名之前,拥有这样的标记真的意味着什么? 我过去只使用#define作为包含警卫,所以这对我来说是全新的。
#define ONEWORD
class ONEWORD FooClass
{
FooClass();
~FooClass();
};
我在这里看到的代码是:https://dl.dropbox.com/u/104992465/glsl.h
以防万一我的上下文过于抽象。
答案 0 :(得分:5)
允许您轻松地将编译器特定关键字添加到类声明中。例如,对于Visual Studio,如果要将此类放在DLL中,则应将定义更改为
#define ONEWORD __declspec( dllexport )
有关其他示例,请参阅here
答案 1 :(得分:4)
哦,所以在查看实际代码之后,它不是ONEWORD
,而是GLSAPI
。这些XYZ_API
宏通常用于有条件地指定特定于平台的链接,例如需要对Windows和Unix进行不同处理的某些__attributes__
。因此,您可以期望在其中一个头文件中定义GLSAPI
(可能在config.h
中),如下所示:
#ifdef WIN32
# define GLSAPI __dllimport
#elif defined __linux__
# define GLSAPI __attribute__((visibility("visible")))
#else
# define GLSAPI
#endif
(伪代码,我不确定所有属性和链接“限定符”,但你可以在代码中查找它们。)