c++中返回语句后的undef宏

undef macro after return statement in C++

本文关键字:undef 语句 返回 c++      更新时间:2023-10-16

我今天在一个c++文件中遇到了一个函数,其中包含了一个#define宏。
该函数以一个return语句结束,后面跟着一个#undef宏。
一个例子是……

int test() {
    #define STUFF()...
    return 0;
    #undef STUFF
}

这是好还是坏的做法,这样做有什么优点或缺点,或者#undef是否需要在返回被确认之前被定位?

这样做很好,此外,宏名称可能与另一个宏名称冲突。因此,您可以使用一个荒谬的短名称,如' a '或荒谬的长名称,如'LIBRARY_LIBRARY_NAME_TEMPORARY_MACRO'

你应该把#undef放在maco的用法之后。

#define和#undef编译器指令。它们是代码预处理的一部分,与它们与"真实"代码的关系无关。

基本上,在编译器运行你的代码之前,它会遍历每个指令(#include, #define, #ifdef)并预处理你的代码,所以,例如,当你这样做时:

int firstVariable = MY_DIRECTIVE;
#define MY_DIRECTIVE 7
int doesNothing = 9;
int myVariable = MY_DIRECTIVE;
#undef MY_DIRECTIVE
int thirdVariable = MY_DIRECTIVE;

转换成

int firstVariable = MY_DIRECTIVE;
int doesNothing = 9;
int myVariable = 7;
int thirdVariable = MY_DIRECTIVE;

只有在它编译你的代码之后(在这种情况下给你一个错误,MY_DIRECTIVE没有在第1行和第7行定义)

更多信息:预处理器指令(cplusplus)

我不会把#defined函数的内容称为"最佳实践"。正如@IanMedeiros所指出的,这是一个预编译器指令,这意味着当编译器运行时,它已经被扩展了。很难理解原作者的想法,但我会考虑一种更清晰的方法,用类似于

的方式记录更多作者的推理:
int test() {
   #if defined(INCLUDE_STUFF)
   Stuff()
   #endif
)