对宏执行{}while(false)的替代方法
alternative to do {} while(false) for macros
以下是代码:
#define myMacro()
{
macro stuff
} ((void)0)
这不是比do {} while(false)
结构更好吗?没有分支,编译时间应该更快——而且所有的东西都有作用域,而且后面需要一个分号——对我来说似乎很完美!
那么有什么缺点吗?或者这真的比do/while好吗?
您的替代构造不适用于if else
语句。
void test() {
if (1)
myMacro();
else
myMacro();
}
编译器错误:
error: expected expression
else
^
1 error generated.
也就是说,大多数优化编译器应该识别do { } while(0)
模式并对其进行优化。我不确定您正在编译的代码库会比替换这些结构快15倍。
我专门使用do-while-false
,这样我就可以从中提取break;
:
do
{
if (Step1() == false) break;
if (Step2() == false) break;
if (DoMoreWork() == false) break;
} while (0);
不能突破不是循环一部分的块。(for
、do-while
、do-while
、switch
)。
所以我认为这是你的宏的一个缺点,也是为什么我更喜欢do-while-false
。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 伪造事实↔false
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- QueryWorkingSet总是返回false
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 没有为自己的结构调用列表推回方法
- 对宏执行{}while(false)的替代方法