【发布时间】:2012-06-19 22:34:35
【问题描述】:
我有一个 c++ 实现文件 (my.cpp),它间接包含一个定义 _MAX_DRIVE 的头文件 (b.h):
// b.h
#define _MAX_DRIVE 64
然后 my.cpp 包含 stdlib.h,它也定义了 _MAX_DRIVE
// stdlib.h
#define _MAX_DRIVE 3 /* max. length of drive component */
显然这会产生一个宏重新定义警告:
stdlib.h(185) : warning C4005: '_MAX_DRIVE' : macro redefinition
我的问题是:
- 这个重新定义影响了多少代码,它只是my.cpp的编译单元吗?
- 如果 my.cpp 是静态库的一部分,重新定义的值能否进入其他代码?
- 如果我什至从未在 my.cpp 中引用 _MAX_DRIVE,是否可以安全地告诉编译器忽略此宏重定义警告?
【问题讨论】:
-
以下划线开头后跟大写字母的标识符(例如
_MAX_DRIVE)由编译器保留。不要在你自己的头文件中使用它们! -
谢谢@Adam,很高兴知道。我正在处理不会更改的遗留代码,所以我只需要处理它。
标签: c++ visual-c++