Недавно я добавил -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





Одна идея, которая приходит мне в голову (не знаю, есть ли для этого нестандартный параметр):
Подготовьте сценарий, который будет принимать выходные данные вашего компилятора и удалить все строки, содержащие заголовки, которых нет в конкретном списке (заголовки ваш).
Это не должно быть так сложно.
Использование опции -Wsystem-headers с gcc будет печатать предупреждающие сообщения, связанные с системными заголовками, которые обычно подавляются. Однако вы хотите, чтобы gcc в основном обрабатывал эти файлы как системные заголовки, поэтому вы можете попробовать передать «-isystem / usr / local / ffmpeg» (или где бы вы ни установили этот пакет), чтобы gcc игнорировал ошибки из файлов, включенных в эти каталоги тоже.
Вы можете исправить заголовки и отправить патч в ffmpeg; совместимость с -pedantic - достойная цель, поэтому я уверен, что они ее рассмотрят, особенно если для этого нужно просто удалить запятые в конце и тому подобное.
@KPexEA: пожалуйста, подумайте о том, чтобы переназначить принятие очевидного лучшего ответа - помочь результатам поиска SO и читателям найти ответ.
Я не знаю, как заставить gcc перестать выдавать эти предупреждения. Однако вы можете хакерски удалить сторонние предупреждения с помощью чего-то вроде llvm-gcc (или просто gcc) -pedantic 2> & 1 | grep -v "/ usr /"
В настоящее время вы не можете указать GCC педантично относиться к одним заголовкам, а не к другим. Вы можете предложить это как функцию, хотя я подозреваю, что это встретит сопротивление, поскольку в идеале все были бы педантичны.
Что вы можете сделать, так это исправить заголовки самостоятельно, создать патч, а затем применить этот патч к более поздним версиям заголовков, если вы обновите библиотеку.
Также отправьте патч в ffmpeg в надежде, что они его примут, но в любом случае вы защищены, даже если они его не принимают.
Заголовки ffmpeg допустимы с -pedantic -std = c99, который он использует для сборки. Но я думаю, что общедоступные заголовки должны быть действительными независимо от того, что extern- "C" тоже ...
На самом деле это не отвечает на вопрос.