gpt4 book ai didi

c++ - 在 C++ 中实现无操作语句的可移植方式是什么?

转载 作者:IT老高 更新时间:2023-10-28 12:56:06 25 4
gpt4 key购买 nike

有时需要在 C++ 中使用无操作语句。例如,当实现在非调试配置中禁用的 assert() 时(另见 this question ):

#ifdef _DEBUG
#define assert(x) if( !x ) { \
ThrowExcepion(__FILE__, __LINE__);\
} else {\
//noop here \
}
#else
#define assert(x) //noop here
#endif

到目前为止,我认为正确的方法是使用 (void)0; 进行无操作:

(void)0;

但是我怀疑它可能会在某些编译器上触发警告 - 例如 C4555: expression has no effect;具有副作用的预期表达式 Visual C++ 警告,该警告不会针对这种特殊情况发出,但在没有强制转换为 void 时会发出。

它是通用便携的吗?有没有更好的办法?

最佳答案

最简单的无操作就是完全没有代码:

#define noop

然后用户代码将有:

if (condition) noop; else do_something();

您提到的替代方法也是无操作:(void)0;,但如果您要在宏中使用它,则应保留 ; 留给调用者添加:

#define noop (void)0
if (condition) noop; else do_something();

(如果 ; 是宏的一部分,那么那里会有一个额外的 ;)

关于c++ - 在 C++ 中实现无操作语句的可移植方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7978620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com