Как игнорировать педантические ошибки компилятора gcc в заголовках внешних библиотек?

Недавно я добавил -pedantic и -pedantic-errors к параметрам компиляции make gcc, чтобы помочь очистить кроссплатформенный код. Все было хорошо, пока он не обнаружил ошибки во внешних включенных файлах заголовков. Есть ли способ отключить эту проверку ошибок во внешних файлах заголовков IE:

Продолжайте проверять наличие таких файлов:

#include "myheader.h"

Прекратите проверять такие включаемые файлы:

#include <externalheader.h>

Вот ошибки, которые я получаю:

g++ -Wall -Wextra -Wno-long-long -Wno-unused-parameter -pedantic --pedantic-errors
-O3 -D_FILE_OFFSET_BITS=64 -DMINGW -I"freetype/include" -I"jpeg" -I"lpng128" -I"zlib"
-I"mysql/include" -I"ffmpeg/libswscale" -I"ffmpeg/libavformat" -I"ffmpeg/libavcodec"
-I"ffmpeg/libavutil" -o omingwd/kguimovie.o -c kguimovie.cpp

In file included from ffmpeg/libavutil/avutil.h:41,
             from ffmpeg/libavcodec/avcodec.h:30,
             from kguimovie.cpp:44:
ffmpeg/libavutil/mathematics.h:32: error: comma at end of enumerator list
In file included from ffmpeg/libavcodec/avcodec.h:30,
             from kguimovie.cpp:44:
ffmpeg/libavutil/avutil.h:110: error: comma at end of enumerator list
In file included from kguimovie.cpp:44:
ffmpeg/libavcodec/avcodec.h:277: error: comma at end of enumerator list
ffmpeg/libavcodec/avcodec.h:303: error: comma at end of enumerator list
ffmpeg/libavcodec/avcodec.h:334: error: comma at end of enumerator list
ffmpeg/libavcodec/avcodec.h:345: error: comma at end of enumerator list
ffmpeg/libavcodec/avcodec.h:2249: warning: `ImgReSampleContext' is deprecated
(declared at ffmpeg/libavcodec/avcodec.h:2243)
ffmpeg/libavcodec/avcodec.h:2259: warning: `ImgReSampleContext' is deprecated
(declared at ffmpeg/libavcodec/avcodec.h:2243)
In file included from kguimovie.cpp:45:
ffmpeg/libavformat/avformat.h:262: error: comma at end of enumerator list
In file included from ffmpeg/libavformat/rtsp.h:26,
             from ffmpeg/libavformat/avformat.h:465,
             from kguimovie.cpp:45:
ffmpeg/libavformat/rtspcodes.h:38: error: comma at end of enumerator list
In file included from ffmpeg/libavformat/avformat.h:465,
             from kguimovie.cpp:45:
ffmpeg/libavformat/rtsp.h:32: error: comma at end of enumerator list
ffmpeg/libavformat/rtsp.h:69: error: comma at end of enumerator list
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
16
0
8 533
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Одна идея, которая приходит мне в голову (не знаю, есть ли для этого нестандартный параметр):

Подготовьте сценарий, который будет принимать выходные данные вашего компилятора и удалить все строки, содержащие заголовки, которых нет в конкретном списке (заголовки ваш).

Это не должно быть так сложно.

Использование опции -Wsystem-headers с gcc будет печатать предупреждающие сообщения, связанные с системными заголовками, которые обычно подавляются. Однако вы хотите, чтобы gcc в основном обрабатывал эти файлы как системные заголовки, поэтому вы можете попробовать передать «-isystem / usr / local / ffmpeg» (или где бы вы ни установили этот пакет), чтобы gcc игнорировал ошибки из файлов, включенных в эти каталоги тоже.

Ответ принят как подходящий

Вы можете исправить заголовки и отправить патч в ffmpeg; совместимость с -pedantic - достойная цель, поэтому я уверен, что они ее рассмотрят, особенно если для этого нужно просто удалить запятые в конце и тому подобное.

На самом деле это не отвечает на вопрос.

Nick 19.03.2009 20:00

@KPexEA: пожалуйста, подумайте о том, чтобы переназначить принятие очевидного лучшего ответа - помочь результатам поиска SO и читателям найти ответ.

sehe 04.11.2011 03:29

Я не знаю, как заставить gcc перестать выдавать эти предупреждения. Однако вы можете хакерски удалить сторонние предупреждения с помощью чего-то вроде llvm-gcc (или просто gcc) -pedantic 2> & 1 | grep -v "/ usr /"

В настоящее время вы не можете указать GCC педантично относиться к одним заголовкам, а не к другим. Вы можете предложить это как функцию, хотя я подозреваю, что это встретит сопротивление, поскольку в идеале все были бы педантичны.

Что вы можете сделать, так это исправить заголовки самостоятельно, создать патч, а затем применить этот патч к более поздним версиям заголовков, если вы обновите библиотеку.

Также отправьте патч в ffmpeg в надежде, что они его примут, но в любом случае вы защищены, даже если они его не принимают.

Заголовки ffmpeg допустимы с -pedantic -std = c99, который он использует для сборки. Но я думаю, что общедоступные заголовки должны быть действительными независимо от того, что extern- "C" тоже ...

alex strange 28.04.2009 05:00

Другие вопросы по теме