Макрос TEXT, вызывающий ошибку в IntelliSense VSCode - PullRequest
1 голос
/ 20 октября 2019

Я учусь использовать <windows.h> для создания консольных приложений. Однако я столкнулся с этой странной ошибкой в ​​VS Code (минимально воспроизводимый код):

#include <windows.h>

int main(){
    const char * c = "Hello";
    TEXT("Hello");      // No error. L"Hello" is a literal
    TEXT(c);            // Error: "identifier "Lc" is undefined"
    return 0;
}

Я также посмотрел на этот вопрос , но нет ответа на вопрос , почему эта конкретная ошибка возникает
(предположительно также в коде?) и просто различает различные макросы.
Я знаю, TEXT(Q) расширяется до __TEXT(Q), что дополнительно генерирует L##Q.
Он компилируется нормально, но VS Code Intellisense по-прежнему помечает это как ошибку.

Моя проблема : Почему это показывает ошибку в VS Code?

Это не совсем проблема, но это не такхорошо выглядят на экране.
Для скриншота см. https://github.com/microsoft/vscode/issues/82923

1 Ответ

0 голосов
/ 20 октября 2019

TEXT("foo") может расширяться до L"foo" или "foo", в зависимости от того, определен макрос UNICODE или нет.

Очевидно, что VSCode intellisense предполагает, что он определен, но GCC не определяет егопо умолчанию.

Если он не определен, TEXT(c); расширяется до c;, и поскольку есть переменная с именем c, вы не получите ошибку компиляции.

Чтобы предотвратитьGCC не соглашаясь с intellisense, вы можете -DUNICODE пометить вызов GCC (или как-то сказать intellisense не определять этот макрос).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...