我正在开发一种简单的编程语言,实际上是一种 C 代码生成器,为了简化起见,我想将所有函数表示为在 C 中没有返回类型,返回类型作为第一个参数(如果有)传递。
我的问题是这是否会带来兼容性或性能问题,我不确定到底有什么区别,但常见的逻辑表明,将返回值分配给返回地址的函数与这样做并没有太大区别手动,地址是一个参数。但也许还有一些额外的工作正在做?也许不同的优化开始了?
我正在开发一种简单的编程语言,实际上是一种 C 代码生成器,为了简化起见,我想将所有函数表示为在 C 中没有返回类型,返回类型作为第一个参数(如果有)传递。
我的问题是这是否会带来兼容性或性能问题,我不确定到底有什么区别,但常见的逻辑表明,将返回值分配给返回地址的函数与这样做并没有太大区别手动,地址是一个参数。但也许还有一些额外的工作正在做?也许不同的优化开始了?
对于复杂的返回类型,您可能是对的,没有区别。
对于简单的返回类型,编译器会将结果返回到一个寄存器中,例如
int foo(...);
但是如果你传递一个指向结果存储的指针,像这样:
void foo (int* result, ...);
它不能(至少在一般情况下不是)。
但是让我建议稍后再考虑优化并忽略可能的性能影响。如果您不是经验丰富的语言设计者,您还会担心其他问题。之后,根据您的设计,您将有其他机会进行优化。例如:如果您将所有 C 代码生成到一个文件中,您可以让 c 编译器进行积极的内联 - AFAICS 将消除我们刚刚讨论的性能差异。