Возникла проблема. Некие нехорошие люди задекларировали библиотечные функции в лучших сишных традициях как bool_t foo(); bool_t bar(); в то время как вызываются они с параметрами (!!!). Как это проверяли и пропустили - ума не приложу. По идее это должен быть портированный из какого-то *никса код (RPC, будь он неладен), но увы :-(. Самое простое - полезть своими грязными руками в чужой хидер и исправить декларацию. Но хочется чего-то более элегантного. Нет ли у GCC прагмы для локального отключения/включения таких проверок? С декорированием имён проблем быть не должно, в начале хидера есть магическое extern "C" {.
2003-11-19, Alexander Derazhne snipped-for-privacy@i.com.ua> пишет:
Они не проверяли.
Самое простое - задавить предупреждения компилятора, но раз ты спросил об этом, тебе не хочется это делать и это правильно.
Можно дать ключ -isystem DIR для тех файлов, по умолчанию gcc не слишком придирается к загловкам системных библиотек.
Но лучше сделай местный патч. На стадии конфигурирования твоего проекта (configure или make config или что там у тебя) скрипт копирует заголовочный файл в твою include dir (в которой gcc будет искать файлы первым, потому что ты дал ему соотвествующий -Idir) и накладывает заготовленный патч.
Формат diff и программа patch позволяют сдвиги от исходных номеров строк вверх и вниз при условии совпадения контекста.
Изготовление патча:
diff -1ub file.h.orig file.h >file.patch
где 1 - число строк контекста, которые тебя устраивают для этого случая, можно 0.
Имеет смысл делать несколько мелких патчей для разных частей одного и того же файла, накладывать их можно в любом порядке.
Наложение патча:
patch --fuzz=0 -p0 <file.patch
--fuzz=0 - запрещает уменьшение строк контекста при поиске вверх и вниз, это для безопасности - пусть лучше патч не наложится, чем наложится в неправильном месте.
Все это позволяет накладывать одни и те же патчи на разные версии исходных файлов в случае, например, сдвига изменяемого куска из-за вставок другого кода.
Я делаю так для заголовков ядра линукс, чтобы они не выдавали кучу предупреждений когда я включаю максимально строгие ключи компилятора для кода моих модулей, чтобы мой код таких предупреждений не имел.
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.