Si void() ne retourne pas de valeur, pourquoi utilisons-nous?
void f()
signifie que f
ne retourne rien. Si void
ne retourne rien, alors pourquoi nous l'utiliser? Quel est le but principal de void
?
Pour renvoyer rien, obv. Une fonction qui n'a que des effets secondaires et ne retourne pas une valeur calculée est parfaitement légitime.
OriginalL'auteur Mustafa Muhammad Yousif | 2012-07-19
Vous devez vous connecter pour publier un commentaire.
Quand C a été inventé la convention est que, si vous ne spécifiez pas le type de retour, le compilateur automatiquement déduit que, vous vouliez retourner un
int
(et la même chose vaut pour les paramètres).Mais souvent vous écrire des fonctions qui font plein de trucs et de ne pas avoir besoin de retourner quelque chose (penser par exemple à propos d'une fonction qui imprime quelque chose sur l'écran); pour cette raison, il a été décidé que, pour spécifier que vous ne voulez pas rentrer quoi que ce soit, vous devez utiliser le
void
mot-clé comme "type de retour".Gardez à l'esprit que
void
sert également à d'autres fins; en particulier:si vous spécifier que c'est la liste des paramètres à une fonction, c'signifie que la fonction ne prend pas de paramètres, ce qui était nécessaire en C, car une déclaration de fonction sans paramètres signifié au compilateur que la liste des paramètres a été laissée indéterminée. En C++, ce n'est plus nécessaire, car un vide liste des paramètres signifie qu'aucun paramètre n'est autorisé pour la fonction;
void
a également un rôle important dans les pointeurs;void *
(et ses variations) signifie "pointeur vers quelque chose de gauche non spécifié". Ceci est utile si vous avez à écrire des fonctions qui doivent stocker/passer des pointeurs sans les utiliser (seulement à la fin, pour vraiment utiliser le pointeur, un cast vers le type approprié est nécessaire).aussi, une troupe de
(void)
est souvent utilisé pour marquer de la valeur délibérément utilisé, la suppression des avertissements du compilateur.Explicite de rejet de la valeur de l'expression à droite. Il allait le faire quand même, même si vous n'avez pas écrit
(void)
, mais elle précise (pour le lecteur et pour le compilateur que vous vraiment ne se soucient pas de la valeur de retour, ce qui est utilisé pour l'arrêt des mises en garde (non utilisé valeur retournée, inutilisé paramètre) dans le cas où vous avez explicitement ne se soucient pas de ces valeurs. Encore une fois, cela n'a pas d'effet particulier sur le code généré, mais c'est un langage qui véhicule un sens particulier.voir, par exemple, ici
OriginalL'auteur Matteo Italia
Cette question a à voir avec l'histoire de la langue: C++ emprunté à partir de C, et C permet implicitement de type tout typée comme
int
(comme il s'est avéré que c'était une idée horrible). Cela inclus les fonctions qui ont été conçus comme des procédures (rappelons que la différence entre les fonctions et les procédures, c'est que les appels de fonction sont des expressions, alors que la procédure invocations sont consolidés). Si je me souviens correctement à partir de la lecture du début de C livres, des programmeurs utilisé pour corriger cette lacune avec un#define
:Cette convention a été adoptée dans la norme, et le
void
mot a été introduit pour désigner les fonctions qui sont destinés à des procédures. Cela a été très utile, parce que le compilateur peut maintenant vérifier si votre code utilise une valeur de retour d'une fonction qui n'était pas prévu de retourner quoi que ce soit, et de vous avertir sur les fonctions que devrait revenir, mais de laisser le contrôle à la fin à la place.define
instruction dans l'ancien code, bloqué par unifdef
avec une absurde de l'étiquette, et ne pouvais pas comprendre pourquoi quelqu'un l'avait écrit.OriginalL'auteur dasblinkenlight
void
ne veut pas dire rien.void
est un type à représentent rien. C'est une différence subtile : la représentation est toujours nécessaire, même si elle ne représente rien.Ce type est utilisée comme fonction de type de retour qui ne retourne rien. Il est également utilisé pour représenter des données génériques, lorsqu'il est utilisé comme
void*
. Ainsi, il semble amusant que bien quevoid
représente rien,void*
représente tout!OriginalL'auteur Nawaz
En impératif de langages de programmation tels que C, C++, Java, etc., les fonctions et les méthodes de type
void
sont utilisés pour leurs effets secondaires. Ils ne produisent pas d'ajouter de la valeur à renvoyer, mais ils influencent le programme de l'état dans l'une des nombreuses façons. E. g., leexit
fonction en C ne renvoie aucune valeur, mais il a pour effet de bord de l'abandon de la demande. Un autre exemple, une classe C++ peut avoir un vide, une méthode qui modifie la valeur de ses variables d'instance.printf
retourne unint
valeur égale au nombre de caractères imprimés.Oups, vous avez raison. Est mon visage rouge...
Au fait, comment dois-je faire barrer du texte? Je voulais à la grève par le biais de l'printf exemple, afin de ne pas invalider votre commentaire, mais je ne pouvais pas le comprendre.
Vous pouvez utiliser
<s>text</s>
ou<strike>text</strike>
.OriginalL'auteur waldrumpus
Parce que parfois, vous n'avez pas besoin de retourner une valeur. C'est pourquoi nous l'utilisons.
OriginalL'auteur Rango
Si vous n'avez pas
void
, comment voulez-vous dire au compilateur que la fonction ne retourne pas une valeur?fooFunction(){}
au lieu devoid fooFunction(){}
?En C++, vous spécifier un type de retour. C pas de type de retour implique
int
.Je voulais dire, pourquoi ne pas en C++ - il, pour indiquer au compilateur qu'une fonction ne renvoie pas de valeur, laissez le type de retour à vide. Pour spécifier le type particulier, écrire le type. Pourquoi une exigence particulière pour l'écriture de vide ? Est-ce davantage une décision de conception ?
Il est précisé que. Probablement en raison de l'ambiguïté qui existe dans le langage C que le C++ est basé sur.
Aussi, C est (censé être) un sur-ensemble de C; depuis une fonction, sans préciser le type est déjà quelque chose en C, c'est (presque) la même chose en C++.
OriginalL'auteur Some programmer dude
Cause d'envisager certaines situations où vous pourriez avoir à faire quelques calculs sur des variables globales et de mettre les résultats dans une variable globale ou vous voulez imprimer quelque chose en fonction des arguments , etc.. Dans ces situations, vous pouvez utiliser la méthode qui n'valeur de retour.. j'.e.. nulle
OriginalL'auteur Vins
Voici un exemple de fonction:
Et voici maintenant une autre fonction:
La deuxième fonction est plus rapide, il n'a pas de copie des struct.
OriginalL'auteur Mateusz N
probablement dire au compilateur " vous n'avez pas besoin de push et pop de tous les cpu-les registres!"
OriginalL'auteur huseyin tugrul buyukisik
Parfois, il peut être utilisé pour imprimer quelque chose, plutôt que de le retourner. Voir http://en.wikipedia.org/wiki/Mutator_method#C_example pour des exemples
OriginalL'auteur Tech163
Fonctions ne sont pas nécessaires pour renvoyer une valeur. Pour indiquer au compilateur qu'une fonction ne retourne pas de valeur, un type de retour void est utilisé.
OriginalL'auteur Zain