ЭВМ/ Инвариантность объектных файлов

11.10.2011

Я не люблю, когда в C коде присутствуют макросы, меняющие объектные файлы от компиляции к компиляции. Например, вставляющие время компиляции или номера строк в asserts. Почему? Потому что они лишают возможности использовать очень простой прием проверки корректности рефакторинга.

Часто бывает, что нужно почистить код от пустых устаревших конструкций, или заменить одни конструкции эквивалентными, или вообще пробелы поправить. Такие изменения делаются в основном механически, думать не надо. Но как проверить, что все проделано корректно, и что получившийся код действительно инвариантен относительно изменений? Самый простой и надежный путь — сравнить объектные файлы до и после изменений, они должны совпадать до байта. Однако, если в коде присутствуют упомянутые выше макросы, объектные файлы всегда будут разными, и придется проверять глазами — огромный подчас — патч.