Почему Visual Studio Code не может найти `ulong / uint`, даже если путь к файлу заголовка находится в пути включения? - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь заставить Intellisense работать с исходным кодом MySQL, используя код Visual Studio в Ubuntu.

Для проекта требуется libmysqlclient-dev, который установлен.

Даже если явключите путь заголовков разработки в includePath:

        "includePath": [
            "/usr/include/mysql",
            "${workspaceFolder}/include"
        ],

(это часть обязательных включений; я добавил много других безрезультатно)

типы данных ulong и uint не распознаются, что приводит к целому ряду ошибок:

identifier "uint" is undefined
identifier "ulong" is undefined
// and so on

Это странно, поскольку я вижу оба типа:

/usr/include/mysql/my_global.h
177:typedef unsigned int uint;
497:typedef unsigned long   ulong;        /* Short for unsigned long */
504:typedef unsigned long long int ulonglong; /* ulong or unsigned long long */

И директива includeприсутствует (пример файла приведен ниже):

client/mysqldump.c
43:#include <my_global.h>

Чего мне не хватает?

1 Ответ

0 голосов
/ 11 мая 2018

Учитывая сложное использование функций условной компиляции, таких как #if, #ifdef и #ifndef в исходном коде (версия доступна здесь ), без конкретной информации о вашей конкретной среде невозможно сказать точно что вам нужно сделать.

Но, в общем, вам нужно убедиться, что ваша среда такова, что строки с соответствующими операторами typedef фактически включены препроцессором C в код, который компилируется.

Есть несколько способов помочь определить это. Во-первых, ваш компилятор может сбросить все свои макросы. Для MSVC см. Как узнать встроенные макросы cl.exe . Во-вторых, вы можете проверить вывод предварительно обработанного кода. Для MSVC см. Как мне увидеть исходный файл C / C ++ после предварительной обработки в Visual Studio? .

Любой из них может оказать большую помощь в просмотре того, какой код на самом деле компилируется, когда имеется много возможных результатов из-за сложных директив препроцессора #if....

...