Я создал систему регистрации, которая компилируется на двух платформах:
1) Платформа отладки, в которой вызовы журналирования чередуются в коде.
2) Платформа на кристалле, в которой вызовы журналирования не должны появляться в коде из-за жестких ограничений на размер кода и время выполнения.
Для достижения своей цели я использовал макросы C:
#ifdef DEBUG_PLATFORM
#define LOG(log) std::sstream s; s<<log; log_func(s);
#else
#define LOG(log) ;
#endif
Увы, предупреждение о неиспользованном переменном компилятора доставляет мне неприятности. Например, следующий код будет компилироваться в платформе отладки, но не в онлайн-платформе:
int a = 5;
int b = func(1,2,3);
LOG("a: "<<a<<" b: "<< b)
Я хотел бы освободить пользователя от размышлений об этих проблемах и выполнения трюков, чтобы избежать предупреждения (например, добавить (void) a). Большинство пользователей не компилируют онлайн-платформу, и ошибки такого типа будут обнаружены в ретроспективе и доставят массу неудобств.
Мне не разрешено изменять флаги компилятора, использование предупреждений о неиспользуемых переменных является обязательным.
У кого-нибудь есть идеи, как преодолеть эту трудность?
Есть ли способ указать компилятору игнорировать предупреждение для всех переменных в некоторой области видимости?