event Qu'est-ce que void signifie en C, C++ et C#?



c# delegate event (10)

Vous cherchez à obtenir les principes fondamentaux sur l'origine du terme VOID et pourquoi il serait appelé vide. L'intention de la question est d'aider quelqu'un qui n'a pas d'expérience C et regarde soudainement une base de code basée sur C.

https://ffff65535.com


Cela signifie "aucune valeur". Vous utilisez void pour indiquer qu'une fonction ne renvoie pas de valeur ou qu'elle n'a aucun paramètre ou les deux. Assez cohérent avec les utilisations typiques du mot vide en anglais.


Cela signifie "aucune valeur". Vous utilisez void pour indiquer qu'une fonction ne renvoie pas de valeur ou qu'elle n'a pas de paramètres ou les deux. Cela correspond beaucoup aux utilisations typiques du mot void en anglais.

Void ne doit pas être confondu avec null. Null signifie pour la variable dont l'adresse est sur la pile, la valeur sur le tas pour cette adresse est vide.


Fondamentalement, cela signifie "rien" ou "pas de type"

Il y a 3 façons principales que void est utilisé:

  1. Argument de la fonction: int myFunc(void) - la fonction ne prend rien.

  2. Valeur de retour de la fonction: void myFunc(int) - la fonction ne retourne rien

  3. Pointeur de données génériques: void* data - 'data' est un pointeur vers des données de type inconnu, et ne peut pas être déréférencé

Note: le void dans un argument de fonction est optionnel en C ++, donc int myFunc() est exactement le même que int myFunc(void) , et il est complètement int myFunc(void) en C #. Il est toujours requis pour une valeur de retour.


Il indique l'absence d'une valeur de retour dans une fonction.

Certaines langues ont deux sortes de sous-programmes: les procédures et les fonctions. Les procédures sont juste une séquence d'opérations, alors qu'une fonction est une séquence d'opérations qui renvoient un résultat.

En C et ses dérivés, la différence entre les deux n'est pas explicite. Tout est essentiellement une fonction. le mot clé void indique qu'il ne s'agit pas d'une fonction "réelle", car elle ne renvoie pas de valeur.


Je l'ai toujours pris pour signifier absent . Voici quatre cas dans le langage C qui correspond à cette utilisation de l' absence

  • R f(void) - Les paramètres de la fonction sont absents
  • void f(P) - La valeur de retour est absente
  • void *p - Le type de ce qui est pointé est absent
  • (void) p - L'utilisation de la valeur est absente

D'autres descendants de C l'utilisent pour d'autres choses. Le langage de programmation D utilise pour les cas où un initialiseur est absent

  • T t = void; - la valeur d'initialisation est absente

Le vide est un type incomplet qui par déffinition ne peut pas être une lvalue. Ce qui signifie qu'il ne peut pas être assigné une valeur.

Donc, il ne peut pas non plus avoir de valeur.


Si vous expliquez le concept à un débutant, il pourrait être utile d'utiliser une analogie. L'utilisation de vide dans tous ces cas est analogue dans le sens à une page dans un livre qui a les mots suivants, "Cette page laissée intentionnellement vide." C'est de différencier le compilateur entre quelque chose qui devrait être marqué comme une erreur, et un type qui est intentionnellement laissé vide parce que c'est le comportement que vous voulez.

Il apparaît toujours dans le code où normalement vous vous attendez à voir apparaître un type, tel qu'un type de retour ou un type de pointeur. C'est pourquoi en C #, void correspond à un type CLR réel, System.Void car c'est un type en soi.

Certains langages de programmation n'ont jamais développé le concept de vide, tout comme certaines cultures humaines n'ont jamais inventé le concept du nombre zéro. Void représente le même avancement dans un langage de programmation que le concept de zéro représente pour le langage humain.


Trois cas d'utilisation pour void:

  1. Les signatures de fonction. void foo(int bar) ne retourne pas de valeur. int bar(void) ne prend aucun paramètre mais elle est généralement exprimée avec une liste d'arguments vide: int bar() . L'utilisation du mot-clé void correspond ici à sa signification en anglais.

  2. Pointeur de type top générique void * qui pointe vers des données non spécifiées et ne peut pas être déréférencé. Ici la signification du vide est différente des autres significations du vide: type universel contre aucun type.

  3. Dans les cas tels que (void) new Foo(this) pour signifier que la valeur de retour est délibérément jetée. Ici, l'utilisation du mot-clé correspond également à sa signification en anglais.

@Gerald couvre déjà les cas 1 et 2, mais le cas 3 n'a pas encore été traité.


Void est l'équivalent de Sub de Visual Basic.


Void est utilisé uniquement dans les signatures de méthode. Pour les types de retour, cela signifie que la méthode ne retournera rien au code appelant. Pour les paramètres, cela signifie qu'aucun paramètre n'est transmis à la méthode

par exemple

void MethodThatReturnsAndTakesVoid(void)
{
// Method body
}

En C # nous pouvons omettre le vide pour les paramètres et pouvons écrire le code ci-dessus comme:

void MethodThatReturnsAndTakesVoid()
{
// Method body
}

Void ne doit pas être confondu avec null. Null signifie pour la variable dont l'adresse est sur la pile, la valeur sur le tas pour cette adresse est vide.





terminology