可能的重复:
当我们定义一个宏时,do(0)有什么用?
为什么在C/C++宏中有时会出现无意义的do/while和if/else语句?
做{...}而(0)有什么好处?
我已经看到一些包含在do/while(0)循环中的多行C宏,如:
#define FOO \
do { \
do_stuff_here \
do_more_stuff \
} while (0)
与使用基本块相反,以这种方式编写代码有什么好处(如果有的话):
#define FOO \
{ \
do_stuff_here \
do_more_stuff \
}
对于英特尔架构,是否有一种方法可以指示GCC编译器生成的代码总是强制分支预测在我的代码中采用特定方式?英特尔硬件是否支持此功能?那么其他编译器或硬件呢?
我会在C++代码中使用它,我知道我希望快速运行的情况,并且不关心当另一个分支需要被采取时,即使它最近采用了该分支.
for (;;) {
if (normal) { // How to tell compiler to always branch predict true value?
doSomethingNormal();
} else {
exceptionalCase();
}
}
Run Code Online (Sandbox Code Playgroud)
作为Evdzhan Mustafa的后续问题,该提示是否可以在处理器第一次遇到指令时指定一个提示,所有后续的分支预测都能正常运行?
在我的C++实现(Visual Studio 2008实现)中,我看到以下行 <cassert>
#ifdef NDEBUG
#define assert(_Expression) ((void)0)
Run Code Online (Sandbox Code Playgroud)
我不明白需要将0转换为void.在我看来,这
#ifdef NDEBUG
#define assert(_Expression) (0)
Run Code Online (Sandbox Code Playgroud)
甚至简单地说
#ifdef NDEBUG
#define assert(_Expression) 0
Run Code Online (Sandbox Code Playgroud)
考虑到assert(expr)可以使用的背景,会做什么.
那么,什么是类型的0危险INT而不是类型0 无效在这种情况下?任何现实的例子?