7
votes

Utilisation de «void» dans un paramètre de fonction

Dupliqué possible:
c Void Arguments

Je viens de commencer avec c et je ne trouve pas de réponse à cette ...

y a-t-il une différence entre xxx

lequel dois-je Préfère et pourquoi?

Notez que cette question va également pour: int Page principale . Devrait-il être: int Page principale ou int Main (VOID) Quand je ne veux pas d'arguments de ligne de commande?

c

6 Réponses :


1
votes

Nope, pas de différence. Certains anciens compilateurs de C se plaint de l'absence de vide dans ce cas, mais il n'y a aucune raison de le faire dans le C ++ moderne.


2 commentaires

Lequel devrais-je préférer? Il faut sûrement être celui que tout le monde utilise! J'ai même téléchargé le code source Coreutils pour vérifier, mais chaque principal a une argument de ligne de commande!


Pas vrai. Voir Stackoverflow.com / Questions / 416345 / ...



-1
votes

Ils sont identiques, mais préférés one est int foo () {}


2 commentaires

Pourquoi est-ce que cela préféré? Il vous permet de passer un objet de type Rubbish_t à la fonction FOO ().


Ils ne sont pas les mêmes pour un compilateur C. FOO (void) signifie que la fonction prend zéro argument. FOO () signifie que la fonction prend un nombre inconnu d'arguments.



0
votes

Il n'y a pas de différence entre les déclarations.

Si vous écrivez int Main (void) , cet instructeur indique au compilateur que principal ne contient aucun argument.

et de même, en cas de principal () ou int Main () , à nouveau, le compilateur comprend principal ne contient aucun argument. Mais, dans le premier cas, vous racontez avec force le compilateur, tandis que dans la deuxième déclaration, le compilateur comprend automatiquement.


1 commentaires

Pas vrai. FOO (void) signifie que la fonction prend zéro argument. FOO () signifie que la fonction prend un nombre inconnu d'arguments. Voir Stackoverflow.com / Questions / 416345 / ...



0
votes

Si vous utilisez ou non des arguments de ligne de commande, la signature de la principale () inclut les paramètres permettant d'accéder aux arguments de ligne de commande.

Voir la signature comme contrat avec l'appelant et non une annonce de la mise en œuvre utilisée réellement.


0 commentaires

15
votes

Les deux formes canoniques de principales sont, selon la norme (voir C99 Section 5.1.2.2.2 "Démarrage du programme"): XXX

Autres sont spécifiquement autorisé, mais ce sont les personnes requises.

sur la forme préférée entre FN (VOID) et fn () , je préfère le premier depuis J'aime énoncer explicitement qu'il n'y a pas de paramètres.

Il y a aussi une différence subtile. C99 Section 6.7.5.3 "Déclarateurs de fonction", paragraphe 10, États:

Le cas particulier d'un paramètre non nomé de type vide comme seul élément de la liste Spécifie que la fonction n'a aucun paramètre.

paragraphe 14 de la même section montre la seule différence:

Une liste d'identifiant ne déclare que les identificateurs des paramètres de la fonction. Une liste vide dans un déclarant de fonction qui fait partie d'une définition de cette fonction spécifie que la fonction n'a aucun paramètre. La liste vide dans un déclarant de la fonction qui ne fait pas partie d'une définition de cette fonction spécifie qu'aucune information sur le nombre ou les types des paramètres n'est fournie.

En d'autres termes, cela signifie la même chose que void dans la définition de la fonction mais pas signifie que dans un déclarateur autonome (c.-à-d. Le prototype) . int fn (); signifie qu'aucune information sur les paramètres n'est encore connue mais int fn (void); signifie qu'il n'y a pas de paramètres.

que signifie que: xxx

est valide mais: xxx

n'est pas.


3 commentaires

Merci pour votre réponse. Où puis-je télécharger la norme de juste pour référence? Je semble frapper des liens payants lors de la recherche.


Le mieux que vous puissiez faire gratuitement est probablement au bas de la page Wikipedia en.wikipedia.org/wiki/ C99 ou un lien direct Open-std .org / jtc1 / sc22 / wg14 / www / docs / n1256.pdf - C'est le brouillon de C99 + TCS 1, 2 et 3. C'est une lecture assez sèche cependant :-)


Merci pour une réponse géniale.



4
votes

En plus de Réponse de Paxdiablo , qui couvre le langage C et donc la question de l'OP, il peut être intéressant de noter que "style vide" est considéré comme une mauvaise pratique en C ++, au moins par Bjarne Stroustrup.

Les raisons des raisons pour lesquelles sont purement liés au style, mais l'utilisation de void comme paramètre de fonction a été réellement bannie de C ++ au début de la normalisation de l'ISO. La syntaxe vide a finalement été autorisée à fournir une compatibilité avec c.

SO SOIT SUIVER CE QUI UP:

  • en C Programmes C, utilisez F (vide) car il applique une dactylographie plus stricte (argument rationnel)
  • dans les programmes C ++, utilisez f () ou vous contrariera divers gourus C ++ (argument irrationnel)

0 commentaires