Макросы и C++

C++ предоставляет новые возможности, некоторые из которых вытесняют предложенные препроцессором ANSI C. Эти новые возможности повышают безопасность типов и предсказуемость языка.

  • В C++ объекты, объявленные как объекты const, можно использовать в константных выражениях. Это позволяет программам объявлять константы, содержащие сведения о типе и значении, а также перечисления, которые можно в виде символов просмотреть в отладчике. Использование директивы препроцессора #define для определения констант не позволяет получить такой точный результат. Ресурс хранения для объекта const предоставляется, только если в программе найдено выражение, принимающее его адрес.

  • Возможности встроенных функций C++ вытесняют макросы типов функций. Преимущества использования встроенных функций по сравнению с макросами изложены ниже.

    • Типобезопасность. Типы встроенных функций проходят ту же процедуру проверки, что и обычные функции. Макросы не являются типобезопасными.

    • Правильная обработка аргументов с побочными эффектами. Встроенные функции оценивают выражения, предоставленные в виде аргументов, прежде чем входить в тело функции. Следовательно, не существует вероятности, что выражение с побочными эффектами будет небезопасным.

Дополнительные сведения о встроенных функциях см. в разделе inline, __inline, __forceinline.

Для обеспечения обратной совместимости все средства препроцессора, существовавшие в ANSI C и более ранних спецификациях C++, сохранены для Microsoft C++.

См. также

Ссылки

Предустановленный макрос

Макросы (C/C++)