C 返回结果和通过指针参数指定结果之间的差异?

C 返回结果和通过指针参数指定结果之间的差异?,c,function,pointers,return,variable-assignment,C,Function,Pointers,Return,Variable Assignment,我正在开发一种简单的编程语言,实际上是一种C代码生成器,为了简化,我想将所有函数表示为C中没有返回类型,返回类型作为第一个参数传递(如果有的话) 我的问题是,这是否会带来兼容性或性能问题,我不确定到底有什么区别,但一般逻辑表明,将返回值分配给返回地址的函数与手动分配返回值的函数没有太大区别,地址是一个参数。但也许还有一些额外的工作要做?也许不同的优化会起作用?对于复杂的返回类型,您可能是对的,没有区别 对于简单的返回类型,编译器将在寄存器中返回结果,例如 int foo(...); 但如果将指

我正在开发一种简单的编程语言,实际上是一种C代码生成器,为了简化,我想将所有函数表示为C中没有返回类型,返回类型作为第一个参数传递(如果有的话)


我的问题是,这是否会带来兼容性或性能问题,我不确定到底有什么区别,但一般逻辑表明,将返回值分配给返回地址的函数与手动分配返回值的函数没有太大区别,地址是一个参数。但也许还有一些额外的工作要做?也许不同的优化会起作用?

对于复杂的返回类型,您可能是对的,没有区别

对于简单的返回类型,编译器将在寄存器中返回结果,例如

int foo(...);
但如果将指针传递给结果存储,如下所示:

void foo (int* result, ...);
它不能(至少在一般情况下不能)


但我建议以后再考虑优化问题,忽略可能的性能影响。如果你不是一个有经验的语言设计师,你会有其他问题需要担心。之后,根据您的设计,您将有其他机会进行优化。例如:如果您将所有C代码生成到一个文件中,您可以让C编译器执行积极的内联操作—AFAIC将消除我们刚才讨论的性能差异。

与what兼容的问题?@KerrekSB—实现某些功能,如不同的调用约定、通用优化等。。。语言和编译器功能使用无返回函数格式。不确定它是否重复,但使用@MarkWilkins-所以可能返回值优化有问题?考虑到我正在跟踪分配返回地址分配所针对的必要临时地址。@user2341104:我就是这样解释的。但是,在实践中,我怀疑在很多情况下,您会注意到差异。一般的想法是JIT并动态加载编译代码,但在此之前,有一个基于堆栈的字节码解释器,它不使用寄存器,例如,表示语言的动态部分。