Я также работал над продуктом, в котором у старого программиста (которого, к счастью, давно нет) также был особый роман с Макросами. Его «нестандартный» язык сценариев - верх небрежности. Это усугублялось тем фактом, что он писал свои классы C ++ на C, что означало, что все функции класса и переменные были общедоступны. Во всяком случае, он написал почти все в функциях макроса и разнообразных функций (еще одно ужасное чудовище, навязанное миру). Таким образом, вместо того, чтобы писать правильный шаблонный класс, он вместо этого использовал бы макрос! Он также прибегал к макросам, чтобы создавать фабричные классы, а не обычный код ... Его код в значительной степени неуправляем.
Из того, что я видел, макросы можно использовать, когда они маленькие и используются декларативно и не содержат движущихся частей, таких как циклы, и других выражений потока программы. Это нормально, если макрос - одна или максимум две строки, и он объявляет и экземпляр чего-либо. То, что не сломается во время выполнения. Также макросы не должны содержать определения классов или определения функций. Если макрос содержит код, в который необходимо войти с помощью отладчика, макрос следует удалить и заменить чем-то другим.
Они также могут быть полезны для упаковки пользовательских функций трассировки / отладки. Например, вы хотите настраиваемую трассировку в отладочных сборках, но не в сборках выпуска.
В любом случае, когда вы работаете в унаследованном коде, просто убедитесь, что удаляете немного макросов за раз. Если вы продолжите в том же духе, со временем у вас будет достаточно времени, чтобы удалить их и сделать жизнь немного проще. Я делал это в прошлом, особенно с грязными макросами. Я включаю переключатель компилятора, чтобы препроцессор генерировал выходной файл. Затем я проверяю этот файл, копирую код, делаю отступ и заменяю макрос сгенерированным кодом. Слава Богу за эту функцию компилятора.