Todo depende de usted, si la persona que llama es su código. Si la persona que llama no está bajo su control, debe seguir su convención existente o desarrollar su propia convención juntos.
Por ejemplo, en la plataforma x86 cuando la aritmética de punto flotante es procesada por instrucciones FPU, el resultado de una función se devuelve como el valor superior en la pila de registro FPU. (Si lo sabe, los registros FPU x86 están organizados en una "pila circular" de géneros). En ese momento no es float
ni double
, es un valor almacenado con precisión FPU interna (que podría ser mayor que float
o double
) y es responsabilidad del que llama recuperar ese valor de la parte superior de la pila FPU y convertirlo a cualquier escribe lo desea. De hecho, así es como funciona una instrucción FPU típica: toma sus argumentos de la parte superior de la pila FPU y vuelve a colocar el resultado en la pila FPU. Al implementar su función de la misma manera, esencialmente emula una instrucción FPU "compleja" con su función, una forma bastante natural de hacerlo.
Cuando la aritmética de coma flotante se procesa mediante instrucciones SSE, puede elegir algún registro SSE para el mismo propósito (use xmm0
como usó EAX
para enteros).
Para las estructuras complejas (es decir, las que son más grandes que un registro o un par de registros), la persona que llama normalmente pasará un puntero a un búfer reservado a la función. Y la función pondría el resultado en el búfer. En otras palabras, bajo el capó, las funciones nunca realmente "devuelven" objetos grandes, sino que los construyen en un búfer de memoria provisto por la persona que llama.
Por supuesto, puede utilizar este método de "memoria intermedia" para devolver valores de cualquier tipo, pero con valores más pequeños, es decir, valores de tipo escalar, es mucho más eficiente usar registros que una ubicación de memoria. Esto aplica, por cierto, a estructuras pequeñas también.
Las enumeraciones son generalmente solo un contenedor conceptual sobre algún tipo entero. Entonces, no hay diferencia entre devolver un enum o un entero.
Si desea conocer la "forma estándar", debe especificar su plataforma. ¿Qué hardware, qué sistema operativo y qué compilador estás usando? –
@StephenCanon No me di cuenta de que están relacionados cuando publiqué la pregunta. Gracias. – smwikipedia