以void*为返回值的函数为什么可以没有return?
c语言中比如这样void* bar(){printf("hi.man");}没有return也可以
准确的问法应该是C语言函数为什么可以没有return语句。

因为对于C语言来说，早期的设计就是：在函数返回时，被放在特定寄存器的那个值就是返回值。

最初就是AX寄存器保存返回值，当然现在已经很多年过去了，也许寄存器的名称改变，但原理不变。

意思是：返回值会直接从寄存器中取，而CPU寄存器一定有值，代码没有显式返回值，只会生成警告而不是错误。

为什么要支持这个功能呢？因为发明C语言的那个时候，汇编还用得很普遍。函数体完全可以直接用汇编写，此时汇编无法给C语言返回值，就约定了汇编把返回值写到AX寄存器，C语言当没有在函数结束找到返回语句时自动把寄存器的值当作返回值，而且请注意，「这不是未定义行为」，而是那个时候的约定，没有这个约定就无法有效的支持函数体内汇编。