Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: C++ проблема с #if ... #endif  (Прочитано 802 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн amdlintuxos

  • Автор темы
  • Любитель
  • *
  • Сообщений: 86
    • Просмотр профиля
C++ проблема с #if ... #endif
« : 17 Декабря 2012, 16:23:06 »
столкнулся со странной проблеммой

#define CREATEDESTROY_LOG_ENABLED 1

#include "../common/Logger.hpp"
#include "../common/myStr.hpp"

/* virtual */
BasePlanet::~BasePlanet()
{
#if CREATEDESTROY_LOG_ENABLED == 1
Logger::Instance().Log("___::~BasePlanet("+int2str(GetId())+")");
#endif
}
Logger работает, но стоит мне заккоментировать
//#include "../common/Logger.hpp"
//#include "../common/myStr.hpp"
компилятор не пожалуется что не нашёл класс Logger и функцию int2str() (папку build чистил, не помагает), и код Логера просто не сработает(такое впячатление препроцессор просто выбросил этот кусок кода). интересность сей ситуации в том, что такое поведение выборочно (т.е. для некоторых файлов это справедливо, для некоторых нет).
я день провозился думал почему некоторые деструкторы не вызываются, а оказывается просто не сработала директива #if ... #endif.

это я случайно заметил(так как знаю иерархию деструкторов). но как избежать такого глюка для логирования данных где иерархии нет(например: случился рендомный евент, он должен быть помещён в лог).

может кто сталкивался с подобным?

если кто захочет попробовать у себя, могу выложить код(но он большой).
« Последнее редактирование: 17 Декабря 2012, 16:26:04 от amdlintuxos »
что не збудется - позабудется

Оффлайн Señor_Gaga

  • Забанен
  • Активист
  • *
  • Сообщений: 878
  • Ubuntu 12.04LTS & Linux Mint 13LTS "Maya"
    • Просмотр профиля
Re: C++ проблема с #if ... #endif
« Ответ #1 : 17 Декабря 2012, 18:49:19 »
А где определена int2str?
Подозреваю, что здесь: #include "../common/myStr.hpp"
которую вы закомментировали.

Оффлайн amdlintuxos

  • Автор темы
  • Любитель
  • *
  • Сообщений: 86
    • Просмотр профиля
Re: C++ проблема с #if ... #endif
« Ответ #2 : 17 Декабря 2012, 19:31:38 »
А где определена int2str?
Подозреваю, что здесь: #include "../common/myStr.hpp"
которую вы закомментировали.
да, там.
наверное я описал ситуацию верх ногами, закоментированные строчки воспринимайте как будто "я забыл подключить нужные хеадеры, и компилятор мне об этом ничего не сказал". проблема в том что Logger используется во многих файлах, где я мог не подключить хеадер, а соответственно он(Logger) и не сработает, о чём я благополучно не узнаю. поэтому хотелось бы разобратся в ситуации
« Последнее редактирование: 17 Декабря 2012, 19:35:04 от amdlintuxos »
что не збудется - позабудется

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: C++ проблема с #if ... #endif
« Ответ #3 : 18 Декабря 2012, 06:11:47 »
Используй для отладки препроцессора
#warning "Blah-blah-blah..."точно будешь знать включил ли препроцессор этот код или нет
Когда узнаешь что он его реально включил, будешь разбираться откуда компилятор "видит" класс Logger, вероятно другой заголовок его включает

 

Страница сгенерирована за 0.026 секунд. Запросов: 25.