Знатокам GCC

Nov 19, 2003 2 Replies

Hello, All!



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



With best regards, Alexander Derazhne.



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

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

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

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

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required