Более того, меня смущает то, что сообщения об ошибках содержат тег C++20, когда моя конфигурация устанавливает стандарт на C++17 (тот же, что используется компилятором).
Сообщение IntelliSense:
идентификатор «size_t» не определено [C/C++(20)]
Минимальный пример компиляции:
Код: Выделить всё
#include
int main() {
size_t s = 0;
return 0;
}
Код: Выделить всё
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [],
"compilerPath": "/usr/bin/clang",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "linux-clang-x64"
}
],
"version": 4
}

Я попробовал поиграться с параметром cppStandard, так как он, похоже, уже отключен, и обнаружил, что size_t будет правильно распознаваться для стандарты c++98 и c++03, и что проблема возникла только в стандартах c++11 и выше. С другой стороны, компилятор принимает size_t для всех стандартных настроек. Изменилось ли что-нибудь в стандарте между этими двумя версиями?
Итак, быстрым решением будет просто установить конфигурацию c++03? Что ж, когда проект использует CMake и файл compile_commands.json, этот параметр, к сожалению, больше не имеет никакого влияния.
Я ожидаю, что IntelliSense распознает любой тип, используемый компилятором. считает действительным. Как я могу заставить IntelliSense принимать size_t?
Изменить:
Я пытался включить , но это не помогло напрямую. Я заметил, что в «__stddef_size_t.h» определение выделено серым цветом в соответствии с новыми стандартами. Судя по комментарию в источнике, я вслепую попробовал добавить параметры компилятора, но это не дало никакого эффекта:
Код: Выделить всё
"compilerArgs": [
"-Xclang",
"-fno-builtin-headers-in-system-modules"
]
Подробнее здесь: https://stackoverflow.com/questions/788 ... ndards-c03