c++中返回语句后的undef宏
undef macro after return statement in C++
我今天在一个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
)
相关文章:
- 我的简单if-else语句是如何无法访问的代码
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 为什么是0;C++中的有效语句
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 是否可以使用if constexpr删除控制流语句
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 我似乎对if/else的基本语句有问题:/
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- If语句在c++中被忽略
- 比较if语句中的数组值和int值
- 以在Qt中的IF语句中设置时间延迟
- Craps游戏问题,忽略if语句
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 如何编写一个使用n倍三元条件语句的C++布尔函数
- c++:定义if语句中的模板
- c++中返回语句后的undef宏