Страницы

Поиск по вопросам

вторник, 2 апреля 2019 г.

const vs CONST в чем разница?

Когда писал метод в классе, заметил, что компилятор(VS 2015) распознает const и CONST как разные идентификаторы, почему? Есть ли разница? Для чего переопределили const в CONST?
пример кода:
class A{
public: void a(CONST int& val);//Будет ругаться, что метод не описан! };
void A::a(const int& val){}


Ответ

Дело в том, что в исходники часто рассчитаны на компиляцию как в режиме C, так и C++ (например, это так для заголовочных файлов WinAPI).
Для этого можно объявить CONST макросом, который раскрывается в const при компиляции C++, и в пустую строку при компиляции C.
Это часто используемый в реальности приём.
Выдержка из свежего заголовочного файла WinAPI:
#ifndef CONST #define CONST const #endif
В вашем конкретно случае лучше не заморачиваться, и доопределить CONST
#define CONST const
(ну или найти какой-нибудь заголовочный файл, в котором он есть).

Ещё по теме: Зачем Microsoft в WinApi создает свои макросы для имеющихся в языке определений?

Комментариев нет:

Отправить комментарий