offsetof()上的Visual Studio语法错误

时间:2015-08-05 20:32:37

标签: visual-studio visual-c++ visual-studio-2008 offsetof

我有类型:

function removeZero(arr) {
    return arr.filter(function(element) {
        if (element !== 0){
            return element; // <-- falsy values are not true.
        }
    });
}

但是当我尝试编译以下内容时:

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

Visual Studio响应:

offset = offsetof(sdf_test_t, z);

这里有什么问题?

我正在使用:

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 */

2 个答案:

答案 0 :(得分: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;
}

我没有任何问题,我认为您可以尝试隔离另一个项目中的代码并再次测试。

答案 1 :(得分:0)

我设法通过在源文件中添加以下行来修复它:

#include <stddef.h>

从这一点来看,如果您没有明确地包含头文件,Visual Studio似乎会默默地包含头文件。更糟糕的是,它假定源文件默认为C++

如果我没有包含带有我使用的符号的头文件,我会期望编译器尖叫并报告错误,而不仅仅是构成某些内容......