Annonces Google
Serveur IRC
Serveur : irc.portlane.se
Canal : #AmigaNG
Activité du Site

Pages vues depuis 25/07/2007 : 24 890 481

  • Nb. de membres 186
  • Nb. d'articles 1 269
  • Nb. de forums 19
  • Nb. de sujets 20
  • Nb. de critiques 24

Top 10  Statistiques

Index du forum »»  Création-Développement »» Help demandée sur routine et programmation C

Help demandée sur routine et programmation C#2508

7Contributeur(s)
SharynnElwoodYesCopthellierefheralex
3 Modérateur(s)
K-LElwoodcorto
Sharynn Sharynnicon_post
Salut les amis...

juste en passant, pouvez-vous me dire comment avoir la taille d'une variable ou entre deux variables.

Je m'explique:

si j'ai :

int DATA[]={1,2,3,4,5};
int ENDDATA=0;

Comment obtenir la taille de DATA pour définir le nombre de variable dedans.

Sous OS3 en faisant cela ENDDATA-DATA, j'ai la taille car les variables sont placé une derrière l'ordre sur mon compilateur C, mais sous OS4 ???

L'idée est de faire les routines Restore, Read et Data pour mon Amos4. Avec la manip. actuelle sur OS3. Si on lit plus que ce qu'il a dans le data, on a un message d'erreur comme prévu. Alors que sur OS4 la variable DATA et la variables ENDDATA ne sont du tout à coté dans la mémoire..

Si vous avez des pistes sur cela..

Si vous avez aussi un moyen d'utiliser un joystick sans passer par la "lowlevel.library", je suis preneur..
Mon but était de faire un librairie AmOS4 tout en natif AmigaOS4. Mais je n'arrive pas à faire des choses et personne n'a de solution (dixit mes autres posts)...
Rien de grave bien-sûr mais je suis très dessus que l'on ai pas d'exemple ou d'aide sur l'utilisation du "keyboard.device" et autres. On se cache toujours vers la SDL et autre GL qui sont super c'est sûre. Ils utilise surement les librairies et devices interne au SDK pour fonctionner, mais comment ??

Bisous bisous
Projet AmOS4 - Retour vers l'Amos sous OS4...

SAM440EP - A1200 3.1 de base
Elwood Elwoodicon_post
Citation: Sharynn  

Sous OS3 en faisant cela ENDDATA-DATA, j'ai la taille car les variables sont placé une derrière l'ordre sur mon compilateur C, mais sous OS4 ???  
Je suis pas développeur alors à prendre avec des pincettes :-)

ça fonctionnait peut-être mais c'est un coup de bol. Je suppose que dans un environnement multitâche, si un programme alloue de la mémoire *pile* entre les 2 allocations de DATA et ENDDATA, ces 2 zones mémoires ne seront pas juxtaposées.

--
Philippe Ferrucci
Avec une Sam460 et AmigaOS 4.1, je suis eco-responsable. Cool !
YesCop YesCopicon_post
Sharynn,
Elwood a raison. Il ne faut pas jamais émettre une supposition sur l'emplacement des variables, c'est le boulot du compilateur.
Je te conseille de créer un tableau contenant tes valeurs et en premier élement la taille.
Par exemple,
Int taille[]={3,6,4,8}
For(i=1;i<=taille[0];++i) utiliser taille[i]

Ou

Nbtaille=3
Int taille[]={6,4,8}

Mais une autre solution serait de créer en dynamique (malloc()) tes tableaux et donc tu connaitrais la taille.
Sam Flex 800 Mhz Amiga OS4.1 FE
Sharynn Sharynnicon_post
Yop !!!

J'ai pris note et j'y avais pensé.

Pour le reste après env 60 essais, je n'ai jamais mis à défaut la position sous OS3, ça fonctionne toujours !!! :)

@yescop:
Malheureusement, je voulais avoir une définition automatique de la taille sans devoir l'entrer en dur.
Mais je vais faire comme ça c'est plus facile par évidence.

@elwood: Développeur ou non toutes les réponses ont un sens et sont paradoxalement aussi intéressante les unes que les autres car les points de vues n'est pas le même.


Projet AmOS4 - Retour vers l'Amos sous OS4...

SAM440EP - A1200 3.1 de base
YesCop YesCopicon_post
Si tu veux une autre bidouille, la voici.

Si  les valeurs de ta table sont toujours dans le même intervalle alors tu peux utiliser cette méthode qui te permettra de ne pas mettre en dur la taille.

Si data contient par exemple que des entiers positifs par exemple, tu choisis une valeur en dehors de cet intervalle par exemple -1 et tu la stockes à la fin de ton tableau. En fait on reviendrait à ta méthode OS3 mais en plus sûr.


Data={1, 4,2,5,6,-1}

Ensuite il n'y a qu'à faire une première lecture du tableau jjsqu'à la valeur -1 en comptant les valeurs lues.


Ps
D'ailleurs, ta méthode os3 fonctionne sûrement à cause du compilateur et/ou des options choisis.
Je me souviens d'un jour où j'ai codé sur amiga un source assembleur 68000 qui fonctionnait parfaitement.
J'apporte le source sur une autre machine, je le compile mais pas sur le même compilo et là cela fonctionne plus!

L'erreur venait que je supposais que tous les compilateurs fonctionnent de la même façon. Sur le mien, la mémoire était initialisée à 0 alrs que sur l'autre machine, la mémoire ne l'était pas...
Alors je te conseille d'éviter ce genre de suppositions car il n'y a pas mieux pour faire des bugs aléatoires difficiles de trouver par la suite.

 Bon courage.
Sam Flex 800 Mhz Amiga OS4.1 FE
Sharynn Sharynnicon_post
Super trouvaille...
je teste ce soir !!!


Cool.. ça fonctionne à90%, le reste étant la "crétinité" de ma programmation.. Merci Kamelito
Projet AmOS4 - Retour vers l'Amos sous OS4...

SAM440EP - A1200 3.1 de base


Message édité par : Sharynn / 02-03-2018 08:21
Sharynn Sharynnicon_post
Je crois qu'il faut que je fasse des cours de pointeur !!!

Si je veux encapsuler cela dans un commande ??

J'ai des soucis....
Exemple:

int VAR[]={1,2,3,4,5,6};

int size;

main()
{

ma_routine(VAR)

printf("%d",size);

}

void ma routine(VAR)
{
 size = *(&VAR+1)-VAR;
}

Mon problème est la définition des variables qui entrent en jeu et surtout VAR.
Je suis une daube !! :)
Projet AmOS4 - Retour vers l'Amos sous OS4...

SAM440EP - A1200 3.1 de base
thellier thelliericon_post
taille en octets
s=sizeof(VAR);

taille en nombre elements
nb=sizeof(VAR)/sizeof(int);

taille d'un ensemble de variables heteroclites : les englober dans une struct et demander le sizeof de la struct

struct mesvars{
int VAR[]={1,2,3,4,5,6};
int x,y,z;
float Pi;
} vars;

size=sizeof(struct mesvars);
fp=Open("monprog.sav",MODE_NEWFILE);
if(fp)
{
Write(fp,&vars,size);
Close(fp);
}

@elwood: Développeur ou non toutes les réponses ont un sens et sont paradoxalement aussi intéressante les unes que les autres car les points de vues n'est pas le même.

Tout à fait : je suis étonné de la diversité des réponses

Alain
Sam440 - Sam460 - X5000 - PowerBookG4 - WinUAE - MiniMig
efher efhericon_post
La solution la plus simple me paraît être la suivante (testé sous OS4):

int DATA[] = { 1,2,3,4 };

Pour avoir la taille du tableau:

printf("%ld\n", sizeof(DATA));

Ce programme donne un résultat égal à 16.

Pour avoir le nombre de données dans le tableau:

printf("%ld\n", sizeof(DATA)/sizeof(int))

Cette ligne donne un résultat égal à 4.
SAM440EP, 512Mo de mémoire, disques durs de 500Go et 1To, OS4.1FE,
carte graphique Radeon 9250.
Petites Annonces

0 annonce(s) publiée(s)

Consulter

AmigaOS 4.1

Laissez-vous tenter par
AmigaOS 4.1
AmiTheme

AmiTheme