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))

我做了一个简单的程序:

#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++

如果我没有在头文件中包含我使用的符号,我希望编译器会尖叫并报告错误,而不仅仅是编造一些东西…

相关内容

  • 没有找到相关文章

最新更新