Попробуем примитивный пример. Рассмотрим
#define min(a,b) ((a)<(b))?(a):(b)
, вызывается как
c = min(a++,++b);
Конечно, реальная разница глубже, но этого должно быть достаточно, чтобы отбросить сходство с макросами.
Изменить: И нет, вы не можете обеспечить безопасность типов с помощью макросов. Как бы вы реализовали typesafe min()
для каждого типа, определяющего меньше сравнения (т. Е. operrator<
)?