Я заметил причуду в отладчике Visual Studio, когда я не могу добавить часы на элемент непрозрачной структуры.
Я получаю ошибку:
Класс "Тип "не имеет члена" member "
Код компилируется и ссылается на непрозрачные элементы структуры, в исходных файлах, которые имеют к ним доступ, в операторах if
и т. Д. Все работает правильно.
Это код C, а не C ++.
Я пробовал эти 4 различных стиля создания typedef
для непрозрачной структуры:
/* same name for struct/typedef, typedef excludes pointer */
typedef struct Type Type;
/* different name for struct/typedef, typedef excludes pointer */
typedef struct Type_ Type;
/* same name for struct/typedef, typedef includes pointer (members not visible in debugger) */
typedef struct Type* Type;
/* different name for struct/typedef, typedef includes pointer */
typedef struct Type_* Type;
3из 4-х работают нормально, когда отладчик показывает значения членов структуры.
Однако один случай, когда определение typedef
включает указатель и использует точно такое же имя для struct и typedef,имеет эту проблему.
Я тестировал в Visual Studio 2010 и 2017, и у обоих есть проблема.
Когда я создаю локальную переменную, используя имя структуры, например:
void func(Type param)
{
struct Type *local = param;
... любые часы в отладчике на local->member
имеют ту же проблему.
Аналогично, пытаясь разыграть часы: ((struct Type *)param)->member
имеет ту же проблему.
Если я хочу специально использовать стиль typedef struct Type* Type;
, есть лиЕсть ли способ обойти добавления элементов структуры в отладчике Visual Studio?
Будет ли это дефектом в Visual Studio?