这两个C警告到底意味着什么?
具有以下C代码:这两个C警告到底意味着什么?,c,warnings,function-pointers,C,Warnings,Function Pointers,具有以下C代码: typedef void*(m3_func)(void); #define NULL ((void*)0) char* lolinfo() { return "You got the additional info! :D"; } m3_func** m3_funcs() { return (m3_func**) { (m3_func*)(&lolinfo), // warning #1 NULL }; //
typedef void*(m3_func)(void);
#define NULL ((void*)0)
char* lolinfo()
{
return "You got the additional info! :D";
}
m3_func** m3_funcs() {
return (m3_func**) {
(m3_func*)(&lolinfo), // warning #1
NULL
}; // warning #2
}
我收到这些警告:
- /home/lk/proj/m3/m3_-lolauncher/lolauncher.c(0,0):警告:从不兼容的指针类型初始化(m3_-lolauncher)
- /home/lk/proj/m3/m3_-lolauncher/lolauncher.c(0,0):警告:标量初始值设定项中的元素过多(m3_-lolauncher)
我从未见过第二个…您的示例代码似乎不是有效的C 如果我理解您的代码,那么
m3\u funcs()
函数应该返回以NULL结尾的函数指针数组。实际上,您正在尝试使用初始值设定项({…}
)来声明数组并立即返回它。但我不认为你可以在变量声明之外使用初始值设定项。。。另外,请注意,此“变量”仅存在于m3_funcs()
调用的上下文中,因此在函数返回后,可能最终返回的地址将不再有效
实现此功能的正确方法是使用静态全局变量并返回其地址:
static m3_func *m3_funcs_array[] = {(m3_func *)&lolinfo, NULL};
m3_func ** m3_funcs()
{
return &m3_funcs_array;
}
您的示例代码似乎不是有效的C 如果我理解您的代码,那么
m3\u funcs()
函数应该返回以NULL结尾的函数指针数组。实际上,您正在尝试使用初始值设定项({…}
)来声明数组并立即返回它。但我不认为你可以在变量声明之外使用初始值设定项。。。另外,请注意,此“变量”仅存在于m3_funcs()
调用的上下文中,因此在函数返回后,可能最终返回的地址将不再有效
实现此功能的正确方法是使用静态全局变量并返回其地址:
static m3_func *m3_funcs_array[] = {(m3_func *)&lolinfo, NULL};
m3_func ** m3_funcs()
{
return &m3_funcs_array;
}
列表初始化将是:
a = { b,c,d }
这里要做的是使用新的通用初始化(x{y}
)。因此,您试图用两个m3\u func*
指针初始化单个m3\u func**
指针。因此,你有两个警告:
m3_func**
!=m3_func*
)列表初始化将是:
a = { b,c,d }
这里要做的是使用新的通用初始化(x{y}
)。因此,您试图用两个m3\u func*
指针初始化单个m3\u func**
指针。因此,你有两个警告:
m3_func**
!=m3_func*
)这些警告真正想告诉你的是,你可能应该在继续之前读一本关于C的介绍性书籍,然后请让我在十分钟内对自己进行L.O.L;“哦,天哪,我真傻,不明白这些简单的错误”:?我不认为typedef做了你所希望的….@awoodland将其更改为
typedef void(*m3_func)(void)代码>(并根据此更改更正上述代码),我会收到相同的警告。我想不是。那是很多lol的…这些警告真正想告诉你的是,你可能应该在继续之前读一本关于C的介绍性书籍,然后请让我在十分钟内对自己进行L.O.L;“哦,天哪,我真傻,不明白这些简单的错误”:?我不认为typedef做了你所希望的….@awoodland将其更改为typedef void(*m3_func)(void)代码>(并根据此更改更正上述代码),我会收到相同的警告。我想不是。您有一个错误,第一行中的m3\u func应该是m3\u func*。谢谢你的回答,采纳了它:)哦,对不起,我会马上纠正这个。我可能犯了更多的错误,但希望你能理解……你有一个错误,第一行中的m3_func应该是m3_func*。谢谢你的回答,采纳了它:)哦,对不起,我会马上纠正这个。我可能犯了更多的错误,但希望你能明白。。。