gpt4 book ai didi

c++ - #ifndef 为什么要使用类名以外的其他名称?

转载 作者:行者123 更新时间:2023-11-28 02:37:40 27 4
gpt4 key购买 nike

类声明通常是这样的:

#ifndef MY_CLASS_20141116
#define MY_CLASS_20141116

...

class MyClass
{
...
}

#endif

我的问题是,为什么不使用类名而不是重新定义一个新标识符:

#ifndef MyClass

...

class MyClass
{
}

#endif

我猜它与标识符冲突(同一个标识符可能出现两次)或命名空间的使用有关(我不知道是否可以在 #ifndef 指令中使用像 std::array 这样的完整标识符)。

如果有更详尽的解释就更好了。

还有,在使用命名空间的时候可以使用第二个测试吗?

#ifndef A::MyClass //not compile, any equivalent?

namespace A
{
...

class MyClass
{
}
}
#endif

最佳答案

第一个例子:

#ifndef MyClass

...

class MyClass
{
}

#endif

这行不通,因为从未为预处理器定义“MyClass”。所有以 # 开头的指令都是预处理器指令,并且是预处理器唯一理解的指令。 class MyClass 对于预处理器没有特殊意义,不会创建预处理器定义

要使其工作,您必须定义 MyClass :#define MyClass。但是,通过这样做,预处理器会将 class MyClass 替换为 class,即 won't compile .

现在,第二个例子:

#ifndef A::MyClass //not compile, any equivalent?

A::MyClass 不是预处理器标记,它是几个标记。 #define SOMETHING 仅适用于一个标记(由字符 a-zA-Z_0-9 组成)。

关于c++ - #ifndef 为什么要使用类名以外的其他名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26957134/

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