fonction en c sous sun - C - Programmation
Marsh Posté le 30-03-2004 à 12:42:59
la déclaration du prototype (void toto en haut) doit être suivie d'un ;
Marsh Posté le 30-03-2004 à 17:26:53
Taz a écrit : int main() |
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*/
printf("\nvaleur %d = %d",i,a[i]);
}
}
Marsh Posté le 30-03-2004 à 17:29:14
Taz a écrit : int main() |
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*/
printf("\nvaleur %d = %d",i,a[i]);
}
}
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
Marsh Posté le 30-03-2004 à 17:48:14
Taz a écrit : n'importe quoi ton srand |
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.
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
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.
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 ?
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.
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 :
|
tu peux essayer de faire
Code :
|
Mais donne les messages d'erreur comme Taz l'a demandé.
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
|
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().
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)
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 ...
j'ai dit qu'on peut pas bourrer un int dans un short sans problème (cf ariane qui fait boom) |
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+
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
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?