gpt4 book ai didi

c - 如何在vc++2008上编译C99源码而不改变原有功能?

转载 作者:行者123 更新时间:2023-11-30 17:53:10 24 4
gpt4 key购买 nike

如:

enum {
SPICE_MSG_CURSOR_INIT = 101,
SPICE_MSG_CURSOR_RESET,
SPICE_MSG_CURSOR_SET,
SPICE_MSG_CURSOR_MOVE,
SPICE_MSG_CURSOR_HIDE,
SPICE_MSG_CURSOR_TRAIL,
SPICE_MSG_CURSOR_INVAL_ONE,
SPICE_MSG_CURSOR_INVAL_ALL,

SPICE_MSG_END_CURSOR
};

static const spice_msg_handler cursor_handlers[] = {
[ SPICE_MSG_CURSOR_INIT ] = cursor_handle_init,
[ SPICE_MSG_CURSOR_RESET ] = cursor_handle_reset,
[ SPICE_MSG_CURSOR_SET ] = cursor_handle_set,
[ SPICE_MSG_CURSOR_MOVE ] = cursor_handle_move,
[ SPICE_MSG_CURSOR_HIDE ] = cursor_handle_hide,
[ SPICE_MSG_CURSOR_TRAIL ] = cursor_handle_trail,
[ SPICE_MSG_CURSOR_INVAL_ONE ] = cursor_handle_inval_one,
[ SPICE_MSG_CURSOR_INVAL_ALL ] = cursor_handle_inval_all,
};

我什至不明白这是什么意思。在vc++2008上无法通过,如何更改?

最佳答案

这就是 C99 中引入的指定初始值设定项。例如,要初始化数组,您可以按任意顺序指定数组索引:

int a[6] = { [4] = 29, [2] = 15 };

相当于

int a[6] = { 0, 0, 15, 0, 29, 0 };

因此,在您的示例中,根据枚举的定义,cursor_handlers 使用 0101 元素进行初始化,然后使用其他几个值进行初始化。

问题是,VC++2008不支持大部分C99功能,包括这个。因此,您必须使用固定顺序初始化数组(旧的 C89 方式),或者使用全 0 初始化数组并分配适当的元素。

太糟糕了,数组是const,所以你必须使用C89方式:

static const spice_msg_handler cursor_handlers[] = {0, 0, /*...all 101 0s*/, cursor_handle_init, /*...*/}

如果它不是const,你可以使用这个:

static spice_msg_handler cursor_handlers[SPICE_MSG_END_CURSOR] = {};
cursor_handlers[SPICE_MSG_CURSOR_INIT] = cursor_handle_init;
cursor_handlers[SPICE_MSG_CURSOR_RESET] = cursor_handle_reset;
//...

关于c - 如何在vc++2008上编译C99源码而不改变原有功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15780431/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com