57 votes

Est-ce que C support de surcharge?

Je veux juste savoir si C prend en charge les cours de chargement? Comme nous utilisons le système de fonctions comme printf avec différents pas d'arguments. M'aider

48voto

Steve Jessop Points 166970

Non, C ne supporte aucune forme de surcharge (sauf si vous comptez le fait que le haut-opérateurs sont surchargés déjà, une forme de surcharge).

printf fonctionne à l'aide d'une fonction appelée varargs. Vous effectuez un appel qui semble comme il pourrait être surchargé:

printf("%d", 12); // int overload?
printf("%s", "hi"); // char* overload?

En fait il n'est pas. Il y a une seule fonction printf, mais le compilateur utilise une convention d'appel pour appeler, où tout ce que les arguments que vous fournissez sont mis dans l'ordre sur la pile[*]. printf (ou vprintf) examine la chaîne de format et l'utilise pour travailler sur la façon de lire ces arguments en arrière. C'est pourquoi printf n'est pas de type-safe:

char *format = "%d";
printf(format, "hi"); // undefined behaviour, no diagnostic required.

[*] le standard n'a pas vraiment dire qu'ils sont passés sur la pile, ou la mention d'une pile à tous, mais c'est le naturel de la mise en œuvre.

29voto

Ken Points 1743

C ne supporte pas la surcharge. (Évidemment, même si elle l'était, on ne les utiliser que pour le printf: vous auriez besoin d'un printf pour chaque combinaison possible des types!)

printf utilise varargs.

22voto

codaddict Points 154968

Non, C ne supporte pas la surcharge, mais il prend en charge Variadic fonctions. printf est un exemple de Variadic fonctions.

8voto

AndreyT Points 139512

Tout dépend de la définition de "support".

De toute évidence, le langage C fournit des opérateurs surchargés dans le langage de base, puisque la plupart des opérateurs en C ont surchargé de fonctionnalités: vous pouvez utiliser les binaires + avec int, long et avec des types de pointeur.

Mais en même temps C ne pas vous permettre de créer vos propres fonctions surchargées, et de la bibliothèque C standard a également recours différemment-les fonctions nommées pour être utilisé avec différents types (comme abs, fabs, labs et ainsi de suite).

En d'autres termes, C a un certain degré de surcharge codé en dur dans le noyau du langage, mais ni la bibliothèque standard, ni les utilisateurs sont autorisés à faire leur propre surcharge.

5voto

Magarshak Points 111

Non, C ne supporte pas la surcharge. Si vous souhaitez mettre en place une surcharge similaire à C++, vous aurez à marquer vos noms de fonction manuellement, en utilisant une sorte de convention cohérente. Par exemple:

int myModule_myFunction_add();
int myModule_myFunction_add_int(int);
int myModule_myFunction_add_char_int(char, int);
int myModule_myFunction_add_pMyStruct_int(MyStruct*, int);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X