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
Réponses
Trop de publicités?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.
Non, C ne supporte pas la surcharge, mais il prend en charge Variadic fonctions. printf est un exemple de Variadic fonctions.
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.
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);