日期:2014-05-16  浏览次数:20615 次

求助Linux宏定义
编译器 g++
有个文件A.h

里面有定义
#define _GNU_SOURCE

若有 B.h 包含 A.h ,则编译正常通过
若同时有 B.h 与 C.h 包含 A.h ,则编译不过,报 _GNU_SOURCE 重定义

注:类似该操作在 Windows 下是能正常编译通过的

为什么会出现这样的原因?

难道我必须定义为

#ifndef _GNU_SOURCE
  #define _GNU_SOURCE
#endif

这样的超长形式??
注:编译器 -D 不使用,A.h是我使用的静态库,我的开发必然包含该头文件,也就是说,对我大多数文件,都会包含 A.h

------解决方案--------------------
这个跟实现有关的。
比如我有一处
#ifdef ABC
#error
#endif

那么如果#define ABC 就会出错。

_GNU_SOURCE 这个GUN可能在哪里限定了重复define 至于为什么,只能查找文档了。