Синтаксическая ошибка 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++
по умолчанию.
Если я не включу заголовочный файл с символом, который я использую, я бы ожидал, что компилятор закричит и сообщит об ошибке, а не просто что-то придумает...