Pergunta

Sim, eu sei que "cdecl" é o nome de uma convenção de chamada proeminente, então, por favor, não me explique as convenções de chamada.O que estou perguntando é o que a abreviatura (?) "cdecl" realmente significa.Acho que é uma escolha de nomenclatura ruim, porque à primeira vista lembra o "declarador C" (um aspecto sintático bastante único de C).Na verdade, existe um programa chamado cdecl cujo único propósito é decifrar declaradores C.Mas a sintaxe do declarador C não tem absolutamente nada a ver com convenções de chamada, até onde eu sei.

Versão simplificada:"stdcall" significa "convenção de chamada padrão".O que significa "cdecl"?

Foi útil?

Solução

Você está lendo muito nisso.Representa a convenção de chamada da implementação para chamar as funções C em geral (mas especialmente importante com varargs).

Não precisa ser uma abreviação para algo que combina "C" e "Declaração";Os nomes são apenas nomes, especialmente na programação.Mnemonics ajuda, mas mesmo que "malloc" signifique "alocar memória", tem significado adicional que conhecemos e anexamos a ele;"AllaCa" também "aloca memória", por exemplo.

ou tomar "struct" que "significa" uma "estrutura", mas a "estrutura" é tão genérica por si mesma que, sem o significado, anexamos subconscientemente a "struct" que ficaríamos irremediavelmente perdidos - à medida que novos programadores ainda aprendem a terminologiasão frequentemente perdidos.

Outras dicas

vem da função C que foi declarada (em contraste com uma função C que não foi declarada que era comum em K & R C).

Na época, foi coexistindo com a Convenção de Chamada de Pascal (onde a callee limpou a pilha), então tipo de sentido para chamá-lo após a linguagem de programação.

Tudo o que você pode querer saber sobre convenções de chamadas.

c declaração.Uma declaração introduzida por / para c.

[edit]

Eu honestamente tenho que admitir que não sei se é isso que é o que é representado, embora seja realmente introduzido por / para C. Mas desde que o caller tem que limpar a memória alocada (em oposição à maioria das outras convenções de chamadas).Também poderia ser uma mnemônica para 'chamador acabar com a limpeza' que eu acho que é realmente uma boa ajuda à memória.: D

Atualizada Eu revisei isso totalmente, depois dos comentários apontarem o quão errado eu estava. cdecl significa que esta função usa a mesma convenção de chamada que C uso de funções. extern "C" significa, além disso, que o nome da função não deve sofrer C++ manipulação de nomes.

Quanto ao porquê de ser chamado cdecl, não sei mais.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top