如何修复错误c2118:负下标

再次,将32位应用程序移植到64位。我在下面提到的C_ASSERT语句中得到负的下标错误。
C_ASSERT (sizeof(somestruct) == some#define);
我还阅读了http://support.microsoft.com/kb/68475文章,但不知道在这种情况下我是否知道如何修复它。 感谢帮助。 提前致谢。     
已邀请:
我猜
C_ASSERT
宏的定义是这样的:
#define C_ASSERT(x) typedef char C_ASSERT_ ## __COUNTER__ [(x) ? 1 : -1];
这是一个编译时断言:如果编译时表达式
x
为真,那么这会扩展为类似
typedef char C_ASSERT_1[1];
声明类型名称
C_ASSERT_1
是类型
char[1]
(1ѭ7array的数组)的别名。严格地说,如果表达式
x
为假,则扩展为
typedef char C_ASSERT_1[-1];
这是一个编译器错误,因为你不能有一个负数大小的数组类型。 因此,你的问题是表达式
sizeof(somestruct) == some#define
是假的,即
somestruct
的大小不是你的代码所期望的。你需要解决这个问题 - 要么改变
somestruct
的大小,要么改变
some#define
的值,确保这不会破坏任何东西。     

要回复问题请先登录注册