同样,将 32 位应用程序移植到 64 位。我在下面提到的 C_ASSERT 语句上收到负下标错误。
C_ASSERT (sizeof(somestruct) == some#define);
我还阅读了http://support.microsoft.com/kb/68475文章,但不确定在这种情况下我是否知道如何解决它。
帮助表示赞赏。
提前致谢。
同样,将 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];
它将 typename 声明C_ASSERT_1
为类型的别名char[1]
(数组 1 char
)。相反,如果表达式x
为假,则展开为
typedef char C_ASSERT_1[-1];
这是一个编译器错误,因为你不能有一个负大小的数组类型。
因此,您的问题是表达式sizeof(somestruct) == some#define
是错误的,即大小somestruct
不是您的代码所期望的。你需要解决这个问题——要么改变 的大小somestruct
,要么改变 的值some#define
,确保这不会破坏任何东西。