Подтвердить что ты не робот

Как я могу скрыть "определенные, но не используемые" предупреждения в GCC?

У меня есть куча времени компиляции, например:

CASSERT(isTrue) or CASSERT2(isTrue, prefix_)

При компиляции с GCC я получаю много предупреждений вроде 'prefix_LineNumber' defined but not used. Есть ли способ, которым я могу скрывать предупреждения для времени компиляции? Мне не повезло в документации GCC. Я думал, что, возможно, var автоматически будет использоваться глобально внутри одного и того же макроса, но я не мог придумать, как это сделать.

Кто-нибудь знает, как скрыть это предупреждение в GCC?

4b9b3361

Ответ 1

Просто увидел эту нить при поиске решений этой проблемы. Я размещаю здесь для полноты решение, которое я нашел...

Флаги компилятора GCC, которые управляют неиспользуемыми предупреждениями включают:

-Wunused-function
-Wunused-label
-Wunused-parameter
-Wunused-value
-Wunused-variable
-Wunused (=all of the above)

Каждая из них имеет соответствующую отрицательную форму с "no-", вставленной после W, которая отключает предупреждение (в случае, если оно было включено, например, -Wall). Таким образом, в вашем случае вы должны использовать

-Wno-unused-function

Конечно, это работает для всего кода, а не только для компиляции. Для поведения, характерного для функции, посмотрите Функциональные атрибуты.

Ответ 2

Решение для GCC, не вызывающее конфликтов с другими компиляторами

#ifdef __GNUC__
#define VARIABLE_IS_NOT_USED __attribute__ ((unused))
#else
#define VARIABLE_IS_NOT_USED
#endif

int VARIABLE_IS_NOT_USED your_variable;

Ответ 3

Вы можете создать нулевой оператор и сделать результат недействительным. Это переносимо для компиляторов, и gcc не даст вам никаких предупреждений, даже если включены -Wall и -Wextra. Например:

int var;    // var is not used
(void)var;  // null statement, cast to void -- suppresses warning

Общей методикой является создание макроса для этого:

#define UNUSED(x) ((void)(x))

int var;
UNUSED(var);

Ответ 4

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

К счастью, это предупреждение не заботится о встроенных функциях.

inline static foo()
{
}

Ответ 5

#define UNUSED_VAR     __attribute__ ((unused))

для любой переменной просто используйте указанный выше макрос перед его типом, например:

UNUSED_VAR int a = 2;

Ответ 6

Трудно ответить, не зная подробностей ваших макросов static static. Возможно, вы можете перейти на другой макрос, чтобы избежать этой проблемы? Вы могли бы либо добавить атрибут "неиспользуемый" в макрос, как было предложено, либо использовать другую форму CASSERT().

Ниже приведены описания нескольких альтернатив:

http://www.jaggersoft.com/pubs/CVu11_3.html

http://blog.kowalczyk.info/kb/compile-time-asserts-in-c.html

http://www.pixelbeat.org/programming/gcc/static_assert.html

Ответ 7

Как насчет -Wunused-label?

Ответ 8

Оберните эти функции следующими директивами. Весь код, который будет помещен между push и pop, не будет предупреждать вас о неиспользуемых функциях. Весь остальной код (внешний push и pop) не будет затронут.

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-function"

... your code

#pragma GCC diagnostic pop