Это самая главная причина, по которой я всегда заставляю своих программистов использовать тела для всех своих операторов if.
int main()
{
if (1)
if(!(0))
printf("rsAssert failed: %s, in %s at %i", "0", __FILE__, __LINE__);
else
printf("mr.32");
return 0;
}
предотвращено хорошими стандартами кодирования
int main()
{
if (1){
if(!(0)){
printf("rsAssert failed: %s, in %s at %i", "0", __FILE__, __LINE__);
}
}
else {
printf("mr.32");
}
return 0;
}
Исправления низкой стоимости изменения перечисленного удара.
#define rsAssert(v) (printf( (!v)?"rsAssert failed: %s, in %s at %i":"", #v, __FILE__, __LINE__))
Это будет работать, но всегда будет printf.
#define rsAssert(v) ((!v)?printf("rsAssert failed: %s, in %s at %i", #v, __FILE__, __LINE__):0)
Это будет распечатано, только если вы отключите утверждение, но выглядит грязно
Также учтите следующее!
if( rand()%2 )
FooLog("Hello World");
ImportantFunction();
#if DEBUG
#define FooLog printf
#else
#define FooLog //
#endif
В выпуске важная функция работает 100% времени, 50% времени.