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