IntelliSense сообщает, что идентификатор «size_t» не определен для стандартов > C++03 [дубликат]C++

Программы на C++. Форум разработчиков
Anonymous
IntelliSense сообщает, что идентификатор «size_t» не определен для стандартов > C++03 [дубликат]

Сообщение Anonymous »

Я использую VS Code с расширением Microsoft C/C++, которое включает IntelliSense. Всякий раз, когда я использую size_t, IntelliSense не распознает его. Я знаю, что стандарт C++ не требует определения size_t и что использование std::size_t может быть более целесообразным. Однако я работаю над проектом, в котором не могу вносить такие изменения. Кроме того, такое использование принимается компилятором (clang-18).
Более того, меня смущает то, что сообщения об ошибках содержат тег C++20, когда моя конфигурация устанавливает стандарт на C++17 (тот же, что используется компилятором).
Сообщение IntelliSense:

идентификатор «size_t» не определено [C/C++(20)]

Минимальный пример компиляции:

Код: Выделить всё

#include 
int main() {
size_t s = 0;
return 0;
}
c_cpp_properties.json:

Код: Выделить всё

{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [],
"compilerPath": "/usr/bin/clang",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "linux-clang-x64"
}
],
"version": 4
}
Операционная система: openSUSE Tumbleweed
Изображение

Я попробовал поиграться с параметром 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"
]
Я читал, что у IntelliSense все еще могут быть проблемы с модулями, поскольку они были добавлены недавно. Но я не могу понять, почему это происходит и со стандартами с 11 по 17. Однако теперь я обнаружил, что смена компилятора на g++ решает проблему.


Подробнее здесь: https://stackoverflow.com/questions/788 ... ndards-c03

Вернуться в «C++»