Значение странного побочного эффекта без утверждения внутри, если

Я просматривал проект и наткнулся на это:

if(!StaticAnimatedEntities)
int esko = esko = 2;

(Тип StaticAnimatedEntities вот простой без знака.)

Это показалось мне очень странным, поэтому я нашел проект esko и нашел другие похожие ifс ничего, кроме этой линии внутри них, например этот:

if(ItemIDMap.find(ID) != ItemIDMap.end())
int esko = esko = 2;

(Обратите внимание, что нет других именованных переменных esko вне тех ifс.)

Что означает этот загадочный кусок кода?

3

Решение

Иногда такой код можно увидеть просто для того, чтобы он служил якорем для размещения точки останова в интерактивном отладчике, чтобы перехватить некоторые «необычные» (чаще всего — ошибочные) условия.

Условные контрольные точки, предоставляемые отладчиком, обычно очень медленные и / или примитивные, поэтому люди часто намеренно планируют заранее и предоставляют такие условные ветви, чтобы создать скомпилированное местоположение для контрольной точки. Такая скомпилированная условная точка останова не замедляет выполнение программы почти так же, как условная точка останова, предоставляемая отладчиком.

Во многих случаях такой код окружен #ifndef NDEBUG/#endif чтобы он не попал в производственные постройки. В других случаях люди просто оставляют его незащищенным, полагая, что оптимизирующий компилятор все равно удалит его.

Для того, чтобы он работал код под if должен генерировать машинный код в отладочных сборках. В противном случае было бы невозможно установить точку останова. У разных людей разные предпочтения в этом отношении, но код практически всегда выглядит странно и бессмысленно.

Именно бессмысленность этого кода дает программистам полную свободу писать там что угодно. И я бы сказал, что это часто становится частью стиля подписи каждого программиста, своего рода отпечатком пальца. Парень в вопросе делает int esko = esko = 2;, по-видимому.

5

Другие решения


По вопросам рекламы [email protected]