Показали нам однажды на лекции пример макроопределения. #define MIN(x,y) ((x) < (y) ? (x) : (y)) Ежу, читавшему On Lisp, понятно, что пример бажный (может произойти множественное вычисление аргументов). При этом, в мануале по cpp написано, что в стандартном С такой баг пофиксить невозможно. На лиспе корректное определение выглядит так (defmacro my-min (x y) (let ((x1 (gensym)) (y1 (gensym))) `(let ((,x1 ,x) (,y1 ,y)) (if (< ,x1 ,y1) ,x1 ,y1)))) А еще и говорят, что на С даже ногу можно прострелить... :/ А каком простреле ноги может идти речь, если даже с элементарными задачами язык справится не может?