В частности, я хочу написать макрос, который
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);
}