我在 中有一个宏定义MyClass.h,如下所示:
#define _BufferSize_ 64
我将 include 指令放置在MyClass.h以下内部main.cpp:
#include "MyClass.h"
这是否意味着我可以_BufferSize_在main.cppand中使用MyClass.h?另外,这是好的做法吗?
是的,它会起作用。(忽略其他人指出的下划线问题。)
指令#include "MyClass.h"只是复制文件的全部内容MyClass.h并将其粘贴到#include. 从编译器的角度来看,只有一个由用户指定的文件和所有包含文件组成的源文件。
话虽如此,如果使用语言内构造而不是预处理器指令会更好。例如替换:
#define _BufferSize_ 64
和
constexpr size_t BufferSize = 64;
它与 唯一不同的是#define它指定值的类型(size_t在本例中)。除此之外,第二个代码的行为方式相同,并且避免了预处理器的缺点。
一般来说,尽量避免使用预处理器指令。这是一种旧的机制,当 C++ 还无法用语言来做这些事情时就使用了它。