我有以下结构:
typedef void (*HSM_State_Fcn)(void*, size_t);
typedef HSM_State_Fcn HSM_Dest_State_Fcn;
typedef uint8_t (*HSM_Guard_Fcn)(void*, size_t);
typedef void (*HSM_Action_Fcn)(void*, size_t);
typedef struct HSM_Transition_Tag
{
HSM_Dest_State_Fcn dest_fcn;
HSM_Guard_Fcn guard_fcn;
HSM_Action_Fcn action_fcn;
}HSM_Transition_T;
我有以下2D数组,我希望每个元素都是NULL
:
static HSM_Transition_T Transition_Table_Array_Test[3][3] = {NULL};
如你所见,我试图等于{NULL}
,但我收到以下警告:
警告:(接近初始化'Transition_Table_Array_Test [0]')[-Wmissing-braces]
将每个元素初始化为NULL
的正确方法是什么?
如果我成功:
static HSM_Transition_T Transition_Table_Array_Test[3][3] = {{NULL}};
我得到了同样的错误。
答案 0 :(得分:2)
$( "#someId" ).typeahead( { ... }, {..., limit: 10, ...});
NULL应该与指针而不是结构一起使用。
如果要在2d结构数组中初始化struct字段,那么
static HSM_Transition_T* Transition_Table_Array_Test[3][3]={{NULL}};
答案 1 :(得分:2)
您收到警告的原因是因为NULL
是基元,但数组的元素是聚合;它们需要使用聚合变量(正确类型)初始化,或者使用还有第三个支撑表达式(在适当位置构建聚合)。
数组的类型不允许使用NULL
初始化元素,因为结构值不能是NULL
,只能是指针。结构就地存在,因此它们不可能从数组“缺席”(数组的元素 结构;如果数组存在,那么它们也是如此)。
编译器抱怨大括号仍然缺失,而不是告诉你结构值不能是NULL
,因为它认为你正在尝试初始化中的函数指针 { {1}}到HSM_Transition_T
(这是一项有意义的操作)。
答案 2 :(得分:1)
你可以写:
static HSM_Transition_T Transition_Table_Array_Test[3][3] = {
{NULL, NULL, NULL},
{NULL, NULL, NULL},
{NULL, NULL, NULL}};
但NULL主要用于指针而不是struct。
你会写的(注意Transition_Table_Array_Test
之前的'*':
static HSM_Transition_T *Transition_Table_Array_Test[3][3] = {
{NULL, NULL, NULL},
{NULL, NULL, NULL},
{NULL, NULL, NULL}};