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


(2 голосов, средний: 4.00 из 5)