我有一个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
我的问题是:
答案 0 :(得分:8)
#undef
。答案 1 :(得分:3)
这个重新定义会影响多少代码,它只是my.cpp的编译单元吗?
它会影响包含b.h和stdlib.h的所有文件,如果它永远不会#undef
- 编辑
如果my.cpp是静态库的一部分,重新定义的值是否会进入其他代码?
不,预处理程序符号仅在编译时生效。编译模块与它无关。
如果我甚至从未在my.cpp中引用_MAX_DRIVE,那么告诉编译器忽略此宏重新定义警告是否安全?
是的,直到有一天你或你的任何代码用户使用它并忘记或不知道这种危险。