gnu gcc Как подавить предупреждение: «typedef» был проигнорирован в этом объявлении [включен по умолчанию]

Я использую GNU gcc 4.6.2 в Fedora 16. Я пишу приложение с использованием стороннего API, после компиляции я получил много предупреждений.

warning: ‘typedef’ was ignored in this declaration [enabled by default]

Просто интересно, как я могу это подавить? Я компилирую свою программу с флагом -Wall.

В этом документе http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html, в нем упоминалось что-то вроде -Wunused-local-typedefs.

Я пробовал -Wno-unused-local-typedefs, но не работал.

Спасибо.


person 2607    schedule 06.03.2012    source источник
comment
Можете ли вы показать пример объявления, вызывающего это предупреждение?   -  person aschepler    schedule 06.03.2012
comment
Что такое сторонний API? Это было написано на C или C ++? Возможно, это поможет вам: stackoverflow.com/questions/913344/?   -  person CygnusX1    schedule 06.03.2012
comment
stackoverflow .com / questions / 6399898 / показывает различные примеры, в которых возникает такое предупреждение.   -  person Mark B    schedule 06.03.2012
comment
Если вы получили это предупреждение, это, вероятно, означает, что вам следует удалить ключевое слово typedef из объявления. Если предупреждение указывает на сторонний код, рассмотрите возможность информирования авторов.   -  person Keith Thompson    schedule 06.03.2012


Ответы (6)


-Wno-unused-local-typedefs у меня работает в gcc 4.8.

person Andres Kievsky    schedule 03.08.2013
comment
В чем смысл вашего ответа? Говорите, что это ошибка старого компилятора? Что он неправильно использует эту опцию? Это никак не помогает оригинальному плакату ... - person mozzbozz; 11.09.2014
comment
Пожалуйста, перечитайте исходный вопрос и его связь с моим ответом. - person Andres Kievsky; 12.09.2014
comment
Вероятно, мы находимся в противоречии друг с другом ... Я вижу следующее: спрашивающий спрашивает, как отключить предупреждение. И этот -Wno-unused-local-typedefs для него не работает. Тем не менее, вы отвечаете только одной строкой: -Wno-unused-local-typedefs у меня работает в gcc 4.8. Теперь мне было интересно, что вы пытаетесь намекнуть (я не хотел вас обидеть, просто хотел пояснить);) Было бы намного яснее, если бы вы ответили еще несколькими словами, а не просто однострочником. .. Я перечитал вопрос и ответ несколько раз, но до сих пор не понимаю сообщения, которое вы пытаетесь передать своим ответом? rgds - person mozzbozz; 12.09.2014

gcc позволяет указать, что пути включения определенных библиотек должны рассматриваться как системные библиотеки с переключателем -isystem, который разрешает особую обработку этих заголовков по отношению к флагам, которые вы используете в остальной части кода. Так, например, если у вас есть неиспользованные локальные определения типов из определенных библиотек Boost в test.cpp (недавно я столкнулся с этим, используя, включая библиотеку Boost signals2)

g++ -o test{,.cpp} -Wall -Wextra -Werror -I /usr/local/boost-1.55.0/include -L /usr/local/boost-1.55.0/lib

и приведенное выше не строится чисто, попробуйте следующее

g++ -o test{,.cpp} -Wall -Wextra -Werror -isystem /usr/local/boost-1.55.0/include -L /usr/local/boost-1.55.0/lib

что будет (при условии, что предупреждения, поступающие из библиотек Boost, которые вы включаете в test.cpp, конечно, ваша единственная проблема).

person bpw1621    schedule 02.05.2014

Согласно исходному коду gcc (gcc / cp / decl.c: 4108):

warning (0, "%<typedef%> was ignored in this declaration"); 

В gcc 4.6.2 нет флага командной строки (это то, что означает 0) для подавления этого предупреждения.

person x539    schedule 06.03.2012

Поскольку -Wunused-local-typedef является частью -Wall, убедитесь, что у вас нет -Wall после -Wno-unused-local-typedef. Если вы это сделаете, -Wall просто снова включит эту опцию.

person Johan    schedule 27.12.2016

В c ++ 17 вы должны использовать might_unused, см.

http://en.cppreference.com/w/cpp/language/attributes

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0212r0.pdf

(извините, я не смог опубликовать пример, так как stackoverflow считает, что он имеет плохой отступ)

person guest    schedule 04.10.2016
comment
maybe_unused не работает для gcc (Debian 6.3.0-18) 6.3.0 20170516. Однако __attribute__((unused)) работает. Неиспользуемые определения типов обычно используются для статических утверждений C. - person Ale; 14.12.2017

Это предупреждение GCC означает, что ваш typedef может быть дублирован, и вместо этого вам следует удалить ключевое слово typedef. Например:

typedef enum class Something {
  THING1,
  THING2,
} Something;

Этот код выше является дублированным типом, потому что класс перечисления уже определен как тип. Таким образом, вы должны удалить ключевое слово typedef, а также что-то в конце!

person Fading    schedule 02.01.2019