У меня есть программа на Си с парой статических функций, которые (пока) не используются.Я хочу отключить предупреждения для этих конкретных функций.Я не хочу отключать все -Wunused-function
предупреждения.Я использую GCC 4.6.В частности:
ek@Apok:~/source$ gcc --version
gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Я следую совету в документации (чтобы использовать push
и pop
), но я не смог заставить его работать.
Iсоздали некоторый упрощенный исходный код для исследования проблемы.Я собираю их с gcc -Wall -o pragma pragma.c
(где pragma.c
).Моя первая версия pragma.c
выглядит следующим образом:
void foo(int i) { }
static void bar() { }
int main() { return 0; }
Как и ожидалось, я получаю это при компиляции:
pragma.c:3:13: warning: ‘bar’ defined but not used [-Wunused-function]
Также, как и ожидалось, я могу отключитьпредупреждение вот так (тогда компиляция завершается беззвучно):
#pragma GCC diagnostic ignored "-Wunused-function"
void foo(int i) { }
static void bar() { }
int main() { return 0; }
Но потом я попробовал это:
void foo(int i) { }
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-function"
static void bar() { }
#pragma GCC diagnostic pop
int main() { return 0; }
Когда я скомпилировал это, я получил оригинальное предупреждение:
pragma.c:4:13: warning: ‘bar’ defined but not used [-Wunused-function]
Удаление pop
избавляет от предупреждения:
void foo(int i) { }
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-function"
static void bar() { }
int main() { return 0; }
Но мне нужен способ отключить предупреждение только для определенного раздела кода.Я не смог этого сделать.
Мне трудно представить, как это могло бы быть предполагаемым поведением ... но многие другие использовали эту версию GCC, и кажется маловероятным, что если бы это былоошибка, это сделало бы это в выпускной версии.
Тем не менее, я не могу понять, как это поведение согласуется с документацией, которая говорит, что «прагмы, возникающие после строки, не влияют на диагностику, вызванную этой строкой."
Кто-нибудь знает, что я делаю не так?(Или, если ничего, у кого-то есть дополнительная информация о проблеме, такая как ссылка на отчет об ошибке и / или информация о возможных обходных путях.)