Bonsoir;
je voudrais savoir si c'est possible d'écrire une fonction ou bien une procédure(void) en langage c qui ne contiennent aucun paramètres en entrée
Bonsoir;
je voudrais savoir si c'est possible d'écrire une fonction ou bien une procédure(void) en langage c qui ne contiennent aucun paramètres en entrée
Oui.
On peut bien sur remonter plein d'autres choses qu'un int...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int function_qui_ne_retourne_rien(void) { return 47; }
Un pointeur, une structure...
Bonne soirée
Pour le fun
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int main(void) { printf("Hello world"); return(0); }
merci pour vos réponses,
par exemple si j'avais une procédure qui calcule la moyenne, mais avant de calculer la moyenne j'ai d'autres calcules, comme la lecture du fichier csv, ensuite le calcule de la distance euclidienne du fichier csv qui donne une matrice , et enfin le calcule de la moyenne de la distance euclidienne
le tout regroupé dans une procédure de la façon suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 void moyenne() { ..... printf("moy=%g",moy); return; } int main(int argc, char *argv[]) { moyenne; system("PAUSE"); return 0; } }
Un bon code découpe normalement les opérations dans des fonctions spécialisées pour 1 actions.
Ça permet entre autre de les réutiliser.
Mais rien n'empêche de faire une super fonction qui regroupe tout..
Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
Un peu de programmation réseau ?
Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.
D'ailleurs fais attention aux parenthèses vides. Alors que foo() exprime un nombre d'arguments arbitraire, foo(void) signifie qu'aucun argument ne peut être passé. Cette nuance ne reste dans le langage que pour des raisons de compatibilité avec des versions anciennes du C. C++ l'a abandonné et foo() a le même effet que foo(void).
Bonjour
Ben sans parler de ton return final totalement inutile pour une fonction ne retournant rien, les paramètres d'une fonction servent justement à la rendre universelle. Grace aux paramètres justement elle pourra faire ses calculs de la même façon quelle que soit la valeur reçue. C'est le pendant informatique de la notation mathématique f(x)=... permettant d'exprimer un calcul sans avoir à se préoccuper de la valeur à calculer qui sera donnée plus tard.
Une fonction sans paramètre reste donc très limitée (cf premier exemple de Bayard qui crée une fonction retournant en tout et pour tout le nombre 47 et tant pis si l'utilisateur a besoin de 48).
Pour ta moyenne par exemple je ne vois pas trop comment elle pourra calculer la moyenne des éléments sans les connaitre. Ou alors tu envisages de passer par des variables globales ce qui est la pire des mauvaises idées de conception...
Non. C'est la notation foo(...) qui exprime des arguments arbitraires. foo() exprime bien une fonction sans argument.
Ah bon ? Je suis pas un pro du C++ mais il me semble avoir vu quand-même foo(void). Il me semble même que justement c'est la seule syntaxe autorisée en C++...
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
C'est bien, je me suis mal souvenu, foo() et foo(void) sont équivalents en C++. Mais la difference, c'est ce qui a été abandonné. Je l'ai corrigé dans mon dernier post.Mettre void n'a aucun effet en C++ mais la syntaxe n'est pas du tout interdite.
Je me suis renseigné un peu plus. Pour clarifier, référons au standard même. L'ébauche N1570 du standard C11 contient le nécessaire.
§6.7.6.3/14:
C'est-à-dire, une déclaration avec des paramètres vides exprime que le programmeur ne fournit aucune information sur les paramètres. Donc, du code comme le suivant est tout à fait possible :The empty list in a function declarator that is not part of a
definition of that function specifies that no information about the number or types of the
parameters is supplied. 145)
La citation dessus est précédée par cette phrase-ci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 void foo(); void foo(int a) { }
Donc, en principe, Sve@r est correct en disant que des parenthèses vides expriment qu'il n'y a pas d'arguments. Mais fais très attention, parce qu'il y a encore §6.5.2.2/6 :An empty list in a function declarator that is part of a definition of that function specifies that the
function has no parameters.
Si l'on appelait une fonction qui manque un prototype et le nombre d'arguments n'est pas le nombre de paramètres, alors on obtiendrait du comportement indéfini, ce dont un compilateur peut ou ne peut pas avertir ! Le suivant cause du comportement indéfini et mon compilateur de choix, gcc, n'en avertit pas, par exemple :If the expression that denotes the called function has a type that does not include a
prototype [...] If the number of arguments does not equal the number of parameters, the
behavior is undefined.
En bref :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 void foo() { } int main(void) { foo(1); }
Une déclaration comme void foo(); sert à exprimer que le nombre de paramètres est inconnu.
Une définition comme void foo() { } sert à exprimer que le nombre de paramètres est zéro.
foo(void) effectue la même chose au niveau du compilateur : Non seulement du comportement indéfini, mais une erreur.
Partager