Знатокам GCC

Hello, All!

Возникла проблема. Некие нехорошие люди задекларировали библиотечные функции в лучших сишных традициях как bool_t foo(); bool_t bar(); в то время как вызываются они с параметрами (!!!). Как это проверяли и пропустили - ума не приложу. По идее это должен быть портированный из какого-то *никса код (RPC, будь он неладен), но увы :-(. Самое простое - полезть своими грязными руками в чужой хидер и исправить декларацию. Но хочется чего-то более элегантного. Нет ли у GCC прагмы для локального отключения/включения таких проверок? С декорированием имён проблем быть не должно, в начале хидера есть магическое extern "C" {.

With best regards, Alexander Derazhne.

Reply to
Alexander Derazhne
Loading thread data ...
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 - запрещает уменьшение строк контекста при поиске вверх и вниз, это для безопасности - пусть лучше патч не наложится, чем наложится в неправильном месте.

Проверять накладываемость патча: patch --dry-run --fuzz=0 -p0 <file.patch

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

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

Reply to
Dmitry Fedorov

Hello, Dmitry! You wrote to Alexander Derazhne on Thu, 20 Nov 2003 10:13:06 +0000 (UTC):

Thanx, буду пробовать.

Alexander,Derazhne@adic,kiev,ua (replace commas with dots) Alexander Derazhne

Reply to
Alexander Derazhne

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.