gpt4 book ai didi

c++ - c++宏重新定义的范围是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:19:40 26 4
gpt4 key购买 nike

我有一个 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

我的问题是:

  1. 这次重新定义影响了多少代码,它只是 my.cpp 的编译单元吗?
  2. 如果 my.cpp 是静态库的一部分,重新​​定义的值能否进入其他代码?
  3. 如果我从未在 my.cpp 中引用 _MAX_DRIVE,告诉编译器忽略此宏重新定义警告是否安全?

最佳答案

  1. 直到当前编译单元结束,或者直到下一个#undef
  2. 没有;宏名称只能被预处理器看到,甚至在编译开始之前就完成运行。
  3. 这听起来不像是一个非常明智的想法。最好避免使用两个同名的宏(尤其是以下划线开头后跟一个大写字母的宏,因为它们是为实现保留的)。

关于c++ - c++宏重新定义的范围是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11110463/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com