Макросы и C++
C++ предоставляет новые возможности, некоторые из которых вытесняют предложенные препроцессором ANSI C. Эти новые возможности повышают безопасность типов и предсказуемость языка.
В C++ объекты, объявленные как объекты const, можно использовать в константных выражениях. Это позволяет программам объявлять константы, содержащие сведения о типе и значении, а также перечисления, которые можно в виде символов просмотреть в отладчике. Использование директивы препроцессора #define для определения констант не позволяет получить такой точный результат. Ресурс хранения для объекта const предоставляется, только если в программе найдено выражение, принимающее его адрес.
Возможности встроенных функций C++ вытесняют макросы типов функций. Преимущества использования встроенных функций по сравнению с макросами изложены ниже.
Типобезопасность. Типы встроенных функций проходят ту же процедуру проверки, что и обычные функции. Макросы не являются типобезопасными.
Правильная обработка аргументов с побочными эффектами. Встроенные функции оценивают выражения, предоставленные в виде аргументов, прежде чем входить в тело функции. Следовательно, не существует вероятности, что выражение с побочными эффектами будет небезопасным.
Дополнительные сведения о встроенных функциях см. в разделе inline, __inline, __forceinline.
Для обеспечения обратной совместимости все средства препроцессора, существовавшие в ANSI C и более ранних спецификациях C++, сохранены для Microsoft C++.