我正在开发一种天真的编程语言,实际上是一个C代码生成器,为了简化,我希望将所有函数表示为C中没有返回类型,返回类型作为第一个参数传递,如果有的话。 / p>
我的问题是这是否会出现兼容性或性能问题,我不确定究竟是什么区别,但是普通的逻辑表明,将返回值分配给返回地址的函数没有多大区别vs手动执行,地址是参数。但也许还有一些额外的工作要做?也许不同的优化可以启动?
答案 0 :(得分:1)
对于复杂的返回类型,你可能是对的,没有区别。
对于简单的返回类型,编译器将结果返回到寄存器中,例如对
int foo(...);
但是如果你传递一个指向结果存储的指针,就像这样:
void foo (int* result, ...);
它不能(至少在一般情况下不是这样)。
但是让我建议稍后担心优化并忽略可能的性能影响。如果您不是一位经验丰富的语言设计师,您还需要担心其他问题。之后,依赖于您的设计,您将有其他优化机会。例如:如果您将所有C代码生成到一个文件中,您可以让c编译器进行积极的内联 - 哪个AFAICS将删除我们刚才讨论的性能差异。