假设我有一个接受void (*)(void*)函数指针的函数用作回调函数:
void do_stuff(void (*callback_fp)(void*), void* callback_arg);
Run Code Online (Sandbox Code Playgroud)
现在,如果我有这样的功能:
void my_callback_function(struct my_struct* arg);
Run Code Online (Sandbox Code Playgroud)
我可以安全地这样做吗?
do_stuff((void (*)(void*)) &my_callback_function, NULL);
Run Code Online (Sandbox Code Playgroud)
我已经看过这个问题并且我已经看过一些C标准,它们说你可以转换为'兼容函数指针',但我找不到'兼容函数指针'的含义.
我读了关于属性的这个问题noreturn,它用于不返回调用者的函数.
然后我用C做了一个程序.
#include <stdio.h>
#include <stdnoreturn.h>
noreturn void func()
{
printf("noreturn func\n");
}
int main()
{
func();
}
Run Code Online (Sandbox Code Playgroud)
并使用以下代码生成代码的汇编:
.LC0:
.string "func"
func:
pushq %rbp
movq %rsp, %rbp
movl $.LC0, %edi
call puts
nop
popq %rbp
ret // ==> Here function return value.
main:
pushq %rbp
movq %rsp, %rbp
movl $0, %eax
call func
Run Code Online (Sandbox Code Playgroud)
为什么函数func()在提供noreturn属性后返回?
人们只需停留在UB即可删除此主题...