tit prob en C - C++ - Programmation
Marsh Posté le 02-03-2003 à 22:41:36
pour le 2, si je le fait avec :
char* S2;
S2=malloc(5);
ça marche mais j'aimerai vraiment bien comprendre la difference!?
Marsh Posté le 02-03-2003 à 22:48:08
Peak a écrit : bon, je me debrouille pas trop trop mal en cpp mais je découvre le c et ai deux questions:
|
A quoi ca sert de mettre une valeur par defaut a ton parametre ?
Quoiqu'il arrive tu devras appeler ta fonction avec une valeur pour ce parametre, en C, donc je vois pas l'interet...
Marsh Posté le 02-03-2003 à 23:01:45
j'ai repondu a ton HS sur fclc++. les valeurs par défaut n'existe pas en C++. le C et le C++ sont 2 langages différents. ca ne te viendrai pas à l'idée de demander à du HTML de faire les meme choses que du Java...alors arrete le mélange
Marsh Posté le 02-03-2003 à 23:02:08
ici j'ai pris un exemple bidon pour être claire...
mais en vérité j'en ai super besoin!!
"Quoiqu'il arrive tu devras appeler ta fonction avec une valeur pour ce parametre, en C.."
mais si je met une valeur par default, je devrai pas être obligé de donner un param ?
Marsh Posté le 02-03-2003 à 23:04:22
Peak a écrit : ici j'ai pris un exemple bidon pour être claire... |
Si, car sinon, il va chercher une fonction definie comme :
void tafonction(void)
Et comme il y en a pas, il va te retourner une erreur.
En C, le nombre deparamatres autant que le nom de la fonction definit la fonction.
Par exemple,
void sum(int a, int b)
et
void sum (int a, int b, int c)
dont deux fonctions differentes.
Bref, spa possible, et c'est vraiment pas indispensable a un algorithme je pense... nan ? un if regle l'affaire...
Marsh Posté le 02-03-2003 à 23:06:56
je me disait juste ke c'tai bizard de pas avoir prevu ça dans le C et ke certain avaient surtement trouvé une parade a ce problème... mais apparement je vais devoir me resigner...
Marsh Posté le 02-03-2003 à 23:07:40
tu te trompes: le C ne permet pas la surcharge. si tu veux resoudre, regarde du coté des macros.
je suis pas un pro des macros mais
Code :
|
ca devrait marcher
Marsh Posté le 02-03-2003 à 23:13:05
j'ai jamais vraiment compris comment marchait les macros
je vais essayer de trouver un tit tutorial la dessus...
et pour l'autre kestion :
y'a t-il une difference entre char* S="123"; et char S[]={"123"}; ??
Marsh Posté le 02-03-2003 à 23:13:46
oui: l'un est valide, l'autre ne passe pas à la compilation
ben la macro marche po
Marsh Posté le 02-03-2003 à 23:23:38
ben ca devrait pas
Code :
|
edit: le code que tu proposes fonctionne apparemment, mais je n'ai jamais vu rien de tel. étant donné que la synthaxe
Code :
|
produit un resultat dont sur. et c'est plus court
Marsh Posté le 02-03-2003 à 23:33:31
k, je note
et entre char S[5]; et char* S; S=malloc(5); y'a-t-il un difference?
Marsh Posté le 02-03-2003 à 23:37:16
oui et elle est énorme
char s[] définit un tableau ([] veut dire que le compilateur déduit lui meme le nombre d'élément). généralement c'est alloué dans la pile. char s[]="a" est equivalent a char s[]={'a', '\0'} ce qui veut dire que chaque char est initialisé.
char *s="dawa". ici s est un pointeur qui pointe vers une zone mémorie généralement statique et read-only. donc s[0]='c' fait tout péter
char *s=malloc(5) est une allocation dynamique généralement dans le tas. l'usage peut etre le meme qu'avec un tableau. ne pas oublier de faire un free lorsque pour libérer cet espace
Marsh Posté le 23-03-2003 à 02:32:49
++Taz a écrit : ben la macro marche po |
Le nom de macro suivi d'une parenthèse ouvrante (même après un blanc) est l'appel de macro-fonction.
Pour feinter:
Code :
|
Bref, bof...
Les macros spabien, n'est-ce pas ?
Peak a écrit : y'a t-il une difference entre char* S="123"; et char S[]={"123"}; ?? |
Code :
|
"123" est une chaîne littérale constante allouée une seule fois comme un tableau global.
Par compatibilité avec le passé, const n'est pas (encore) obligatoire.
Code :
|
La paire d'accolades englobantes est de trop.
Mais il semblerait que le C, et par compatibilité C++, acceptent une (et une seule) paire de trop pour l'initialisation de n'importe quel tableau.
Marsh Posté le 02-03-2003 à 22:30:53
bon, je me debrouille pas trop trop mal en cpp mais je découvre le c et ai deux questions:
je veux fair un passage de parametre à une fonction avec une valeur par defaut (je le fais exectement comme en C++ )
et gcc veut rien savoir : "parse error befor '=' token " ??
par exemple :
void fct (int i = 0){
fprintf(stdout, "i = %d", i);
}
kelk'un aurai il un autre technik en c qui me donnerai le même resultat ke se que j'aurai en c++??
2) je cherche à assigner à un string un bout d'un autre dont les limite inferieur et supperieur sont defini par deux entiers par exemple (i et j), je m'attend évidement a fair ça :
et non!! pour S2 y m'affiche un string de 9 char??