Как я могу установить точку останова для пустого оператора в C ++?

В частности, я хочу написать макрос, который

1) позволяет мне установить точку останова
2) больше ничего не делает
3) не вызывает предупреждений компилятора

#define NO_OP   ((void)0)

void main()
{
    bool b = true;
    if (b)
        NO_OP;  // I try to set a breakpoint here, but

}               // it jumps to here (in Visual Studio 2010)

Я тоже пробовал

#define NO_OP   (assert(1))             // doesn't work
#define NO_OP   (sizeof(int))           // doesn't work
#define NO_OP   __asm{}                 // doesn't work
#define NO_OP   do {(void)0;} while(0)  // warning: conditional is constant

Единственное, что пока работает, - это достойный передергивания

#define NO_OP   { int x = 0; x = x; }

Должен быть способ лучше.

ИЗМЕНИТЬ
Спасибо Blorgbeard , __asm ​​{nop} действительно работает. Но я просто понял, что все, что связано с фигурными скобками, не идеально (проблематично?), Потому что после этого остается бесполезная точка с запятой. (Позже) Я не знаю, что такое приседания с ассемблером, но я попытался удалить скобки, и вуаля! Вот ответ: __asm ​​nop Спасибо!

ДЛЯ ЛЮБОПЫТНЫХ
Вот немного менее абсурдный пример:

string token = GetNextToken();
if (!Ignore(token))
{
    // process token
    DoThis(token);
    DoThat(token);
}

Этот код завершен - пока программа работает правильно, я не хочу ничего знать об игнорируемых токенах. Но в любой момент (и без изменения кода) я хочу убедиться, что я не отклоняю хорошие токены

string token = GetNextToken();
if (Ignore(token))
{
    NO_OP; // set breakpoint here to monitor ignored tokens
}
else
{
    // process token
    DoThis(token);
    DoThat(token);
}
16
задан dog44wgm 27 January 2012 в 13:25
поделиться