Поделиться через


Макросы и C++

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

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

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

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

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

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

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

См. также

Предустановленные макросы
Макросы (C/C++)