// Original do/while Macro
//原始的do/while宏
#define MY_ASSERT_ONE(x) do { if (!(x)) { _asm int 3 } } while(0)
// new Macro that removes the loop
// 新宏移去了loop
#define MY_ASSERT_ONE(x) { if (!(x)) { _asm int 3 } }
代码清单 4 避免一个编译器错误
(a). /* This code will cause a compile error */
/* 此段代码将产生一个编译器错误 */
void main(void)
{
int i = 10;
printf("i: %d\n", i);
int j = 100; /* This statement will cause a compiler error since
it was not declared at the top of the function. */
/* 此语句将导致一个编译器错误,
因为它未在函数顶部声明过。 */
printf("j: %d\n", j);
}
(b). /* whereas this code will not */
/*而此段代码将不产生一个编译器错误*/
void main(void)
{
int i = 10;
printf("i: %d\n", i);
{
int j = 100; /* This statement is fine since it is akin
to defining a local function within the function. */
/* 此语句很精炼,
因为它在函数中定义了一局部函数的同族。*/
printf("j: %d\n", j);
}
}