Отладчик игнорирует меня
Имея код:
Date::Date(const char* day, const char* month, const char* year):is_leap__(false)
{
my_day_ = lexical_cast<int>(day);
my_month_ = static_cast<Month>(lexical_cast<int>(month));
/*Have to check month here, other ctor assumes month is correct*/
if (my_month_ < 1 || my_month_ > 12)
{
throw std::exception("Incorrect month.");
}
my_year_ = lexical_cast<int>(year);
if (!check_range_year_(my_year_))
{
throw std::exception("Year out of range.");
}
if (check_leap_year_(my_year_))//SKIPS THIS LINE
{
is_leap__ = true;
}
if (!check_range_day_(my_day_, my_month_))
{
throw std::exception("Day out of range.");
}
}
bool Date::check_leap_year_(int year)const//IF I MARK THIS LINE WITH BREAKPOINT I'M GETTING MSG THAT THERE IS NO EXECUTABLE CODE IS ASSOSIATED WITH THIS LINE
{
if (!(year%400) || (year%100 && !(year%4)))
{
return true;
}
else
{
return false;
}
}
Что очень странно на мой взгляд. В моем коде есть вызов этого fnc, почему компилятор игнорирует это.
PS Я пытаюсь отладить в релизе.
2 ответа
Решение
Попытка отладки в выпуске приводит к боли. Функция встроена, так что вы не можете сломать ее. Этот вид оптимизации будет происходить везде, значения в переменных будут казаться отключенными и т. Д. Лучше всего отлаживать при отладке.
Кстати, просто сделайте: return !(year%400) || (year%100 && !(year%4));
То, что я имею в виду под "он был встроен", - это то, что ваш код стал:
if (!(my_year_%400) || (my_year_%100 && !(my_year_%4)))
{
is_leap__ = true;
}
Здесь нет вызова функции и нечего ломать.
Заголовок функции действительно не компилируется ни в какой исполняемый код. Попробуйте установить точку останова на открытой фигурной скобке или первый оператор в функции.