我可以在头文件中定义宏吗?

Try*_*ost 5 c++ header

我在 中有一个宏定义MyClass.h,如下所示:

#define _BufferSize_ 64
Run Code Online (Sandbox Code Playgroud)

我将 include 指令放置在MyClass.h以下内部main.cpp

#include "MyClass.h"
Run Code Online (Sandbox Code Playgroud)

这是否意味着我可以_BufferSize_main.cppand中使用MyClass.h?另外,这是好的做法吗?

NO_*_*AME 5

是的,它会起作用。(忽略其他人指出的下划线问题。)

指令#include "MyClass.h"只是复制文件的全部内容MyClass.h并将其粘贴到#include. 从编译器的角度来看,只有一个由用户指定的文件和所有包含文件组成的源文件。


话虽如此,如果使用语言内构造而不是预处理器指令会更好。例如替换:

#define _BufferSize_ 64
Run Code Online (Sandbox Code Playgroud)

constexpr size_t BufferSize = 64;
Run Code Online (Sandbox Code Playgroud)

它与 唯一不同的是#define它指定值的类型(size_t在本例中)。除此之外,第二个代码的行为方式相同,并且避免了预处理器的缺点。

一般来说,尽量避免使用预处理器指令。这是一种旧的机制,当 C++ 还无法用语言来做这些事情时就使用了它。