Предупреждение о неиспользуемой переменной из кода отладки - PullRequest
2 голосов
/ 09 апреля 2019

Я создал систему регистрации, которая компилируется на двух платформах:

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). Большинство пользователей не компилируют онлайн-платформу, и ошибки такого типа будут обнаружены в ретроспективе и доставят массу неудобств.

Мне не разрешено изменять флаги компилятора, использование предупреждений о неиспользуемых переменных является обязательным.

У кого-нибудь есть идеи, как преодолеть эту трудность? Есть ли способ указать компилятору игнорировать предупреждение для всех переменных в некоторой области видимости?

1 Ответ

1 голос
/ 09 апреля 2019

Я бы посоветовал вам регистрировать переменную за раз:

#ifdef DEBUG_PLATFORM
#define LOG(log)  { std::stringstream s; s<< #log << '=' << log << ' '; log_func(s); }
#else
#define LOG(log) (void) log;
#endif

#log напечатает имя переменной.

(void) log заставит компилятор игнорировать тот факт, что он не использовался.

Вы можете регистрировать больше переменных при условии, что вы добавите больше версий макросов, но это будет грязно. С #log и (void) log вы больше не можете передавать "a: " << a на LOG

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