#ifdef и необъявленный идентификатор - PullRequest
0 голосов
/ 14 июля 2020

Я разрабатываю проект в Visual Studio 2017. Следующий код:

#ifdef MY_DEFINE
#else
    std::string txt = "abc";
#endif

output += txt;

не компилируется - я получаю сообщение об ошибке: 'txt': undeclared identifier

MY_DEFINE не определен и еще ветка компилируется. Этот код - часть более крупного проекта. Я не могу воспроизвести эту ошибку компиляции в простом консольном приложении по умолчанию. Означает ли это, что в проекте могут быть настройки, вызывающие эту ошибку компиляции?

1 Ответ

2 голосов
/ 14 июля 2020

Вы можете проверить, что происходит на самом деле, используя директиву #error:

#ifdef MY_DEFINE
#error It was defined
#else
#error It was NOT defined
    std::string txt = "abc";
#endif

output += txt;

Возможно, что MY_DEFINE действительно определено в каком-то другом файле заголовка, который вы включаете. Обычно самый простой способ определить это в Visual Studio - просто навести курсор мыши на идентификатор и посмотреть, что он говорит, или ctrl + щелкнуть, чтобы go для определения. Но иногда эти подсказки в IDE не совсем соответствуют тому, что происходит при компиляции.

...