タイプがあります:
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))