Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2010, 10:49   #1
guz
Пользователь
 
Регистрация: 29.10.2010
Сообщений: 29
По умолчанию Показательные грабли

Словил вчера две шикарные ошибки, советую больше никому такие не ловить:

1) Многострочный макрос:

Код:
#define HELLO(X) printf("Hello, "); \
                            printf("%s!\n", (X))


//тут много кода, пока его писал забыл что такое HELLO()
//и так, беззаботно
   if (name) HELLO(name);
//угадайте, что выводится?
2) Переопределние имени:

Код:
int var = 0;

do
{
     var = do_smth_1();
     if (var) break;
     var = do_smth_2();
     if (var) break;
     var = do_smth_3();
     if (var) break;
     var = do_smth_4();
     if (var) break;
     int var = do_smth_5();
     if (var) break;
     var = do_smth_6();
     if (var) break;
     var = do_smth_7();
     if (var) break;
     var = do_smth_8();
     if (var) break;
     var = do_smth_9();
     if (var) break;
     var = do_smth_10();
     if (var) break;
     var = do_smth_11();
}
while(0);

if (var)
  printf("ERROR\n");
else
  printf("SUCCESS\n");
Если var не ноль после do_smth_5 и далее получаем "SUCCESS".
Без всяких предупреждений компилятора.


Всем успехов, и не наступать на такие грабли.

Последний раз редактировалось guz; 25.11.2010 в 11:05.
guz вне форума Ответить с цитированием
Старый 25.11.2010, 11:11   #2
guz
Пользователь
 
Регистрация: 29.10.2010
Сообщений: 29
По умолчанию

Вторая проблема решена опцией -Wshadow компилятора.
guz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск