Грабли: замена макросов на функции в C

Произошел со мной недавно один случай. Преамбула: наш отдел разрабатывает ОС реального времени для военных целей, а другой отдел разрабатывает некий софт (неважно, какой именно), который под этой ОС работает. ОС поставляется в виде набора библиотек и заголовочников, а процесс сборки заключается в том, что весь пользовательский софт статически компонуется вместе с ОС в единый монолитный образ, который и загружается на целевую машину. А поскольку все это дело военное, то сопровождается такими захватывающими мероприятиями, как предварительные и государственные испытания, сдача программного продукта в архив и т.д. Кто в ящиках работал, тот знает.

Теперь собственно случай. Понадобилось мне поменять кое-какой код в libc. Гляжу в заголовочный файл — а там некоторые функции и не функции вовсе, а макросы. Ну, думаю, непорядок. Заменил макросы на нормальные функции, подправил их как требовалось, тесты соответствующие написал — все замечательно работает.

Через пару дней прибегает представитель соседнего отдела и говорит, что у них все падает и плющится, и все по вине моих функций. Иду разбираться. Гляжу — компоновщик не может найти функции, которые вызывались в старых макросах. Ну делов-то, говорю, пересоберите проект, я там макросы на функции заменил. Какой тут крик начался… У них же софтина уже прошла испытания, и они ее в архив сдали, вместе с контрольной суммой. Пересобрать ее — значит заново кучу бумажной волокиты произвести. Ой…

Что поделать, пересобрали. А я с тех пор к макросам отношусь с большой осторожностью.

УжасноПлохоНормальноХорошоОтлично (2 голосов, средний: 4.00 из 5)
Loading ... Loading ...

Оставьте свой отзыв

Если введен идентификатор OpenID, можно не задавать имя и почту (но имя лучше все же задать).

XHTML: Можно использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

Это не спам, честное слово