Имя cout
должно быть видно в том месте, где вы вызываете макрос. Запись
TIMER_START(0);
все равно что писать
double ___timer__0 = (double) getTickCount();;
и применяются те же правила видимости.
Я подозреваю, что изменение cout
на std::cout
решит проблему. Конечно, вам нужно включить соответствующий заголовок в любой исходный файл, который вызывает макрос.
Некоторые другие проблемы:
Идентификаторы, начинающиеся с подчеркивания, зарезервированы для реализации. Я считаю, что C ++ также резервирует идентификаторы со встроенными двойными подчеркиваниями. Вы пытаетесь избежать столкновения с определенными пользователем идентификаторами, но вы рискуете столкнуться с определенными компилятором или определенными библиотекой идентификаторами. Вероятно, это не вызовет каких-либо видимых проблем, но вам следует использовать другой уникальный префикс.
Конечные точки с запятой в ваших определениях макросов являются избыточными; вы предоставите их при вызове:
TIMER_START(0);
TIMER_END(0);