Bienvenue sur Le site des utilisateurs francophones actuels et futurs d'AmigaOS 4.x
Recherche
13 visiteur(s) et 0 membre(s) en ligne.
 
 
    Annonces Google

    Petites Annonces

il y a 2 annonces
    Liens

Toutes les informations sur :
  • Amiga OS 4:
    AmigaOS.net
  • Logiciels pour OS4 :
    OS4depot
  • Matériel Amiga :
    ACube Systems
  • Magazine papier :
    AmigaPower
  • Magazine en ligne :
    Obligement
  •     Activité du Site

    Pages vues depuis 25/07/2007 : 105 828
    • Nb. de Membres : 180
    • Nb. d'articles : 1 108
    • Nb. de Forums : 18
    • Nb. de Sujets : 17
    • Nb. de Critiques : 22

    Top 10  Statistiques

      
    Modéré par : K-L Creols Elwood 
    Index du Forum > > Création-Développement > > Help demandée sur routine et programmation C
    2 pages [ 1 | 2 ]
    AuteurHelp demandée sur routine et programmation C
    Sharynn
    173     

    Sharynn
      Posté : 28-02-2018 15:50

    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

      Afficher le profil de SharynnProfil  Ouvrir le site web de Sharynnwww  Imprimer ce commentaireImprimer
    Elwood
    3481       

    Elwood
      Posté : 28-02-2018 21:57

    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 !

      Afficher le profil de ElwoodProfil  Ouvrir le site web de Elwoodwww  Imprimer ce commentaireImprimer
    YesCop
    347      

    YesCop
      Posté : 28-02-2018 22:50

    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.6

      Afficher le profil de YesCopProfil  Imprimer ce commentaireImprimer
    Sharynn
    173     

    Sharynn
      Posté : 01-03-2018 08:41

    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

      Afficher le profil de SharynnProfil  Ouvrir le site web de Sharynnwww  Imprimer ce commentaireImprimer
    YesCop
    347      

    YesCop
      Posté : 01-03-2018 09:49

    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.6

      Afficher le profil de YesCopProfil  Imprimer ce commentaireImprimer
    kamelito
    118     

    kamelito
      Posté : 01-03-2018 15:36

    https://www.hackerearth.com/fr/practice/notes/how-long-is-that-array/

    /kamelito

      Afficher le profil de kamelitoProfil  Imprimer ce commentaireImprimer
    Sharynn
    173     

    Sharynn
      Posté : 01-03-2018 17:12

    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

      Afficher le profil de SharynnProfil  Ouvrir le site web de Sharynnwww  Imprimer ce commentaireImprimer
    Sharynn
    173     

    Sharynn
      Posté : 02-03-2018 13:16

    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

      Afficher le profil de SharynnProfil  Ouvrir le site web de Sharynnwww  Imprimer ce commentaireImprimer
    thellier
    849      

    thellier
      Posté : 02-03-2018 18:44

    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

      Afficher le profil de thellierProfil  Imprimer ce commentaireImprimer
    efher
    81    

    efher
      Posté : 03-03-2018 07:30

    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.

      Afficher le profil de efherProfil  Imprimer ce commentaireImprimer
    Aller à la page : [ 1 | 2 ]
    Sauter à :


    Tous les Logos et Marques sont déposés, les commentaires sont sous la responsabilité de ceux qui les ont publiés. AmigaOS 4.x est (c) Hyperion Entertainment

    Conception graphique du thème : PowerMetal, codage : Alexandre Balaban
    Certaines images sont © Martin \"Mason\" Mertz

    Temps : 1529795846.7681 seconde(s)