Подводные камни злоупотребления макросами в реальном программировании
Макросы и препроцессоры играют важную роль в программировании на языке C, предлагая возможность для определения текстовых замен и выполнения генерации кода. Однако их чрезмерное использование может привести к многочисленным проблемам, о чем свидетельствует реальный пример, иллюстрирующий наихудшее злоупотребление макросами.
Рассмотрим сценарий, в котором программист, движимый неустанным стремлением к побайтовой оптимизации из-за Имея предыдущий опыт работы с системами с ограниченной памятью, он прибег к нетрадиционному подходу. Этот человек определил макрос с именем RETURN следующим образом:
#define RETURN(result) return (result);}
Затем этот макрос использовался для определения нескольких функций без закрывающих скобок, в результате чего кодовая база выглядела так:
int myfunction1(args) { int x = 0; // do something RETURN(x) int myfunction2(args) { int y = 0; // do something RETURN(y) int myfunction3(args) { int z = 0; // do something RETURN(z) }
Это крайнее злоупотребление макросами серьезно нарушило подсветку синтаксиса, сделав невозможным визуальное различие между функциями и блоками кода. Оправдание такого подхода программистом проистекало из глубоко укоренившегося мышления, отточенного во время работы с языком ассемблера, где сохранение байтов имело первостепенное значение.
Другие эксцентричности, связанные с этим человеком, еще больше подчеркнули потенциальные последствия экстремальных методов программирования. Выпуклое зеркало, стратегически расположенное над монитором, служило элементарной системой наблюдения для обнаружения присутствия зрителей. Кроме того, внезапный выход со стула с последующим быстрым набором отжиманий использовался как форма самонаказания всякий раз, когда компилятор обнаруживал ошибки в коде.
Этот пример служит предостережением об опасностях чрезмерного злоупотребление макросами. Хотя макросы могут обеспечить определенные преимущества в определенных сценариях, их неразборчивое использование может привести к тому, что кодовые базы будут трудно читать, поддерживать и отлаживать.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3