Знатокам GCC

Do you have a question? Post it now! No Registration Necessary

Threaded View
Hello, All!

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

With best regards,
            Alexander Derazhne.



Re: Знатокам GCC
Quoted text here. Click to load it

Они не проверяли.

Quoted text here. Click to load it

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

Можно дать ключ -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


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


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

--
Если уж гайка есть, она должна быть затянута до конца.

Re: Знатокам GCC
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



Site Timeline