Синтаксическая ошибка Visual Studio в offsetof()

У меня есть тип:

typedef struct 
{
   int x;
   int y;
   int z; 
} sdf_test_t;

Но когда я пытаюсь скомпилировать следующее:

offset = offsetof(sdf_test_t, z);

Visual Studio отвечает:

c:\dataflash.c(542) : error C2143: syntax error : missing ')' before 'type'
c:\dataflash.c(542) : error C2059: syntax error : ')'

Что здесь не так?

Я использую:

Microsoft Visual Studio 2008 x86 
Microsoft (R) Visual Studio Version 9.0.21022.8.

offsetof макрос определен в <stddef.h> следующее:

/* Define offsetof macro */
#ifdef __cplusplus

#ifdef  _WIN64
#define offsetof(s,m)   (size_t)( (ptrdiff_t)&reinterpret_cast<const volatile char&>((((s *)0)->m)) )
#else
#define offsetof(s,m)   (size_t)&reinterpret_cast<const volatile char&>((((s *)0)->m))
#endif

#else

#ifdef  _WIN64
#define offsetof(s,m)   (size_t)( (ptrdiff_t)&(((s *)0)->m) )
#else
#define offsetof(s,m)   (size_t)&(((s *)0)->m)
#endif

#endif  /* __cplusplus */

По ликвидации. Я установил, что компилятор использует:

#define offsetof(s,m)   (size_t)&reinterpret_cast<const volatile char&>((((s *)0)->m))

2 ответа

Я сделал простую программу как это:

#include <stddef.h>

typedef struct 
{
  int x;
  int y;
  int z; 
} sdf_test_t;

int main() {
  size_t offset = offsetof(sdf_test_t, z);
  return 0;
}

У меня нет проблем, я думаю, что вы можете попробовать изолировать код в другом проекте и протестировать его снова.

Мне удалось это исправить, добавив следующую строку в мой исходный файл:

#include <stddef.h>

Исходя из этого, кажется, что Visual Studio автоматически включает заголовочные файлы, если вы не включаете их явно. Хуже того, предполагается, что исходный файл C++ по умолчанию.

Если я не включу заголовочный файл с символом, который я использую, я бы ожидал, что компилятор закричит и сообщит об ошибке, а не просто что-то придумает...

Другие вопросы по тегам