Могу ли я сделать макрос HALT_ONCE? - PullRequest
1 голос
/ 10 сентября 2009

Я пытаюсь найти прозрачное решение для остановок отладки, которые постоянно попадают в мою игру.

Для тривиального примера; скажем, у меня остановка в моем рендере, который сообщает мне, когда я пытаюсь использовать NULL материал. Мой рендерер справляется с этим нормально, но я все еще хочу знать, что я делаю неправильно. Эта остановка будет действовать каждый кадр, если я не отключу его вручную.

Это идентификатор кода, который нужно превратить в макрос (или что-то еще такое же прозрачное, как и переносимое)

#define HALT(errorMsg) printf(errorMsg);__asm { int 3 };
satic bool hitOnce = false;
if (!hitOnce)
{
    hitOnce = true;
    HALT("its all gone wrong!")
}

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

1 Ответ

6 голосов
/ 10 сентября 2009

что-то не так с этим?

#define HALT_ONCE(err_msg) \
do { \
    static bool hitOnce = false; \
    if (!hitOnce) { \
        hitOnce = true; \
        printf(err_msg); \
        __asm { int 3 }; \
    } \
} while(0)

Тогда вы можете просто сделать это в своем коде:

HALT_ONCE("its all gone wrong!");

do / while создает собственную область видимости, благодаря которой hitOnce существует только в течение очень короткого времени. Я думаю, что это предотвратит конфликт с другими переменными hitOnce, созданными этим макросом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...