Uso de nombres de funciones como punteros de funciones
El documento de fundamentos de C90 proporciona información sobre la elección de diseño de equiparar nombres de funciones con punteros de funciones. Esta conveniencia simplifica el uso de punteros de función en contextos específicos.
Declaraciones de funciones
Considere las declaraciones:
int f(); int (*pf)();
Llamadas a funciones
Todas las siguientes expresan llamadas a funciones válidas:
(&f)(); f(); (*f)(); (**f)(); (***f)(); pf(); (*pf)(); (**pf)(); (***pf)();
La primera expresión de cada línea se cubrió anteriormente. El segundo es convencional. Las expresiones posteriores implican una conversión implícita del designador de función a un valor de puntero en la mayoría de los contextos.
Justificación del diseño
El comité no vio inconvenientes significativos al permitir estas formas y consideró prohibirlos como esfuerzo excesivo. Por lo tanto, la equivalencia entre designadores de funciones y punteros de funciones ofrece conveniencia en el uso de punteros.
Conversión implícita
Otra observación interesante es la conversión implícita de tipos de funciones en punteros cuando se usan como parámetros pero no como tipos de retorno:
typedef bool FunctionType(int); void g(FunctionType); // Implicitly converts to void g(FunctionType *) FunctionType h(); // Error FunctionType *j(); // Returns a function pointer with the type bool(int)
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3