fonction en c sous sun

fonction en c sous sun - C - Programmation

Marsh Posté le 30-03-2004 à 12:39:16    

Bonjour.
Je suis en train de me former en c, je travaille actuellement sur les declaration de fonction. Sous linux tvb quand on fait des passage de parametre par adresse (pointeurs). Mais quand on passe sous sun ca ne marche pas de la meme maniere. On ne peut pas associer un type a un parametre. Exp:
Sous linux
#include<stdio.h>
void toto(int a,short *b)
main
{
declarations et instructions
 
}
void toto(int a,short *b)
{
idem
}
si on applique le meme principe sous sun ca ne marche pas.
Pourquoi?

Reply

Marsh Posté le 30-03-2004 à 12:39:16   

Reply

Marsh Posté le 30-03-2004 à 12:42:59    

la déclaration du prototype (void toto en haut) doit être suivie d'un ;
 

Reply

Marsh Posté le 30-03-2004 à 13:08:06    

int main() :o

Reply

Marsh Posté le 30-03-2004 à 17:26:53    

Taz a écrit :

int main() :o


Merci de me le rappeler mais ce n'est pas ce petit(;) qui est la cause de mon probleme le compilateur m'aurai envoye un message comprehensible. Voici mon bout de code plus detaille:
#include<stdio.h>
#include<stdlib.h>
#define ESC 27
void fill(short *a,unsigned n);/*ici sur sun les arguments sont refuses*/
main()
{
short num[80];
unsigned x,y,seed;
int rep;
do
{
   printf("\nle programe produit des nombres aleatoires" );
   srand(++seed);
   if (seed>65534)
     seed=0;
fill(num,80);
rep=getchar();
}while(rep!=ESC);
void fill(short *a,unsigned n)/*ici le types des arguments est refuses*/
{
 unsigned i;
  for(i=0;i<n;i++)
   {
   a[i]=rand();/*ici le systeme m'indique qu'il y a une incompatibilite entre le parametre passe et l'affectation*/ :non:  :non:  
   printf("\nvaleur %d = %d",i,a[i]);
   }
}

Reply

Marsh Posté le 30-03-2004 à 17:29:14    

Taz a écrit :

int main() :o


Merci de me le rappeler mais ce n'est pas ce petit(;) :)  qui est la cause de mon probleme le compilateur m'aurai envoye un message comprehensible. Voici mon bout de code plus detaille:
#include<stdio.h>
#include<stdlib.h>
#define ESC 27
void fill(short *a,unsigned n);/*ici sur sun les arguments sont refuses*/ :non:  :non:  
main()
{
short num[80];
unsigned x,y,seed;
int rep;
do
{
   printf("\nle programe produit des nombres aleatoires" );
   srand(++seed);
   if (seed>65534)
     seed=0;
fill(num,80);
rep=getchar();
}while(rep!=ESC);
void fill(short *a,unsigned n)/*ici le types des arguments est refuses*/ :non:  
{
 unsigned i;
  for(i=0;i<n;i++)
   {
   a[i]=rand();/*ici le systeme m'indique qu'il y a une incompatibilite entre le parametre passe et l'affectation*/ :non:  :non:  
   printf("\nvaleur %d = %d",i,a[i]);
   }
}

Reply

Marsh Posté le 30-03-2004 à 17:30:56    

n'importe quoi ton srand
 
 
une fois pour toute en début de programme
 
srand(time(NULL));
 
et après, autant de rand() que tu veuxs

Reply

Marsh Posté le 30-03-2004 à 17:48:14    

Taz a écrit :

n'importe quoi ton srand
 
 
une fois pour toute en début de programme
 
srand(time(NULL));
 
et après, autant de rand() que tu veuxs


Le probleme ne vient pas du srand mais des parametres lies a la fonction que je ne sais pas declarer sous sun, ton message ne repond pas à ma question.

Reply

Marsh Posté le 30-03-2004 à 17:51:49    

en tout cas tu sais pas te servir de srand. et t'as un compilo de merde

Reply

Marsh Posté le 30-03-2004 à 17:56:22    

Taz a écrit :

en tout cas tu sais pas te servir de srand. et t'as un compilo de merde


Mon compilo est tout ce qu'ily a de plus correct puisque fourni par sun hp et essaye de te concentreer sur le probleme et pas à coté. Tu me fais perdre du temps avec tes remarques inutile qui ne font pas avances les choses.

Reply

Marsh Posté le 30-03-2004 à 17:58:32    

dis moi l'idiot du village, t'es sur que t'as pas déjà une fonction sysètme qui s'appelle fill ? tu pourrais pas lire tes message d'erreur. rand renvoie un int, et toi tu veux le mettre dans un short, ça gueule ?

Reply

Marsh Posté le 30-03-2004 à 17:58:32   

Reply

Marsh Posté le 30-03-2004 à 18:15:54    

Taz a écrit :

dis moi l'idiot du village, t'es sur que t'as pas déjà une fonction sysètme qui s'appelle fill ? tu pourrais pas lire tes message d'erreur. rand renvoie un int, et toi tu veux le mettre dans un short, ça gueule ?


Etre vulgaire ne fera pas non plus avancer plus vite mais visiblement tu as l'air de connaitre le sujet alors continuons.
Je ne vois pas trop ce que tu veux dire.
je fait un a[i]=rand(); et dans ma fonction fill j'ai declare  le parametre short *a donc ils sont du meme type, et plus haut quant j'appel ma fonction c'est avec le parametre num qui est aussi un short. Essaye de detailler un peu plus.

Reply

Marsh Posté le 30-03-2004 à 18:19:58    

doone les messages de ton comilo :o

Reply

Marsh Posté le 31-03-2004 à 03:43:19    

Je suis pas sûr d'avoir compris ton problème mais certains vieux compilos C (K&R)  ne veulent pas du nom des arguments dans les déclarations. Bref au lieu de faire

Code :
  1. void fill(short *a, unsigned n);


tu peux essayer de faire

Code :
  1. void fill(short *, unsigned);


Mais donne les messages d'erreur comme Taz l'a demandé.

Reply

Marsh Posté le 31-03-2004 à 18:38:40    

matafan a écrit :

Je suis pas sûr d'avoir compris ton problème mais certains vieux compilos C (K&R)  ne veulent pas du nom des arguments dans les déclarations. Bref au lieu de faire

Code :
  1. void fill(short *a, unsigned n);


tu peux essayer de faire

Code :
  1. void fill(short *, unsigned);


Mais donne les messages d'erreur comme Taz l'a demandé.


Sous sun visiblement le compilateur est different pour les parametres de fonctions. Ond oit stipuler le type des parametres en dehors des parentheses de la fonction mais le nom à l'interieur:
void fill(a,b)
short a[],b;/*la variable a et le pointeur a[] sont une seule et meme variable parcequ'elles portent le meme nom*/
{/*A partir de l'accolade on declarera des variable locales avec leurs types et nom*/
=
Ensuite contrairement a ce que m'a dit taz on peut sous sun ranger dans un short une valeur int renvoyee par la fonction rand().

Reply

Marsh Posté le 31-03-2004 à 18:40:59    

super, on a un gogo qui récupère un compilateur pré-ansi et il nous soutient qu'il est pas pourri ...
 

Citation :

Ensuite contrairement a ce que m'a dit taz on peut sous sun ranger dans un short une valeur int renvoyee par la fonction rand().

j'ai dit qu'on peut pas bourrer un int dans un short sans problème (cf ariane qui fait boom) :o

Reply

Marsh Posté le 31-03-2004 à 19:04:19    

Taz a écrit :

super, on a un gogo qui récupère un compilateur pré-ansi et il nous soutient qu'il est pas pourri ...
 

Citation :

Ensuite contrairement a ce que m'a dit taz on peut sous sun ranger dans un short une valeur int renvoyee par la fonction rand().

j'ai dit qu'on peut pas bourrer un int dans un short sans problème (cf ariane qui fait boom) :o


Qu'entends par pre-ansi, en ce qui concerne le compilateur qu'il'y a sous sun certaines conversion de type se font automatiquement.
Merci a tous de m'avoir aide.
A+

Reply

Marsh Posté le 31-03-2004 à 19:15:12    

pré-ansi ? ben on va dire antédéluvien. on va dire 89, mais il y avait déjà une certaine convergence des dialectes avant.
 
ton compilateur fait rien d'autres que fermer sa gueule, c'est tout, mais la conversion int -> short est dangereuse pas nature

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed