"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que os nomes das funções podem ser usados ​​como ponteiros de função no C90?

Por que os nomes das funções podem ser usados ​​como ponteiros de função no C90?

Publicado em 23/12/2024
Navegar:821

Why Can Function Names Be Used as Function Pointers in C90?

Usando nomes de funções como ponteiros de função

O documento de justificativa do C90 fornece informações sobre a escolha de design de igualar nomes de funções com ponteiros de função. Essa conveniência simplifica o uso de ponteiros de função em contextos específicos.

Declarações de função

Considere as declarações:

int f();
int (*pf)();

Chamadas de função

Todas as seguintes chamadas de função expressas válidas:

(&f)();
f();
(*f)();
(**f)();
(***f)();

pf();
(*pf)();
(**pf)();
(***pf)();

A primeira expressão em cada linha foi abordada anteriormente. O segundo é convencional. As expressões subsequentes implicam uma conversão implícita do designador de função em um valor de ponteiro na maioria dos contextos. proibindo-os como esforço excessivo. Assim, a equivalência entre designadores de função e ponteiros de função oferece conveniência no uso de ponteiros.

Conversão implícita

Outra observação interessante é a conversão implícita de tipos de função em ponteiros quando usados como parâmetros, mas não como tipos de retorno:

typedef bool FunctionType(int); void g(FunctionType); // Converte implicitamente para void g(FunctionType *) FunctionTypeh(); // Erro TipoFuncional *j(); // Retorna um ponteiro de função com o tipo bool(int)

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3