IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Définir l'octet à utiliser ?


Sujet :

C

  1. #21
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    En fait, en théorie, char admet des valeurs dans [0..127] (au minimum), et représente des caractères, tandis que signed char (au moins [-128..127]) et unsigned char (au moins [0..255]) sont des types à vocation numérique.
    La norme spécifie explicitement ces trois types, et permet d'implémenter char comme un signed ou unsigned char.

    Pour des maths, il vaudrait mieux utiliser l'un des deux types explicites
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  2. #22
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    Citation Envoyé par leternel Voir le message
    Pour des maths, il vaudrait mieux utiliser l'un des deux types explicites
    Tout a fait d'accord (ou utiliser les types int8_t, ... car c'est plus explicites)

  3. #23
    Membre habitué
    Homme Profil pro
    root
    Inscrit en
    Janvier 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : root

    Informations forums :
    Inscription : Janvier 2013
    Messages : 174
    Points : 144
    Points
    144
    Par défaut
    Merci pour les réponses.
    Même si je poste pas, je suis le sujet et fait mes recherches.

    Sur mes recherches j'ai trouvé pas mal d'info.
    L'arrière plan du C est pas mal compliqué ou plutôt peu connu/expliqué.

    Voici un lien intéressent: http://ilay.org/yann/articles/mem/
    Ça empire mes questionnements..

    Par exemple, j'aimerais savoir: disons qu'on est en 64-bit, chaque adresse est composé de 8 octet ? si on utilise un int8_t, il reste 7 octet vide dans la même adresse ? si oui, ces 7 octets vide doivent rester vide ou d'autre int8-16-32 peuvent être inséré dedans ?

  4. #24
    Invité
    Invité(e)
    Par défaut
    Attention, une adresse est différent de la zone qu'elle pointe.

    Une adresse codé sur 32 ou 64bits peut très bien désigner un bout de zone mémoire qui lui ne fait qu'un octet (comme un char ou un int8_t par exemple).

    La taille de l'adresse reste fixe, mais la taille zone mémoire qu'elle désigne, elle, peut varier.

  5. #25
    Membre habitué
    Homme Profil pro
    root
    Inscrit en
    Janvier 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : root

    Informations forums :
    Inscription : Janvier 2013
    Messages : 174
    Points : 144
    Points
    144
    Par défaut
    Bon, j'ai décidé de m'y mettre à l'assembleur, car c'est plus explicite pour apprendre ces détails, je ne penses pas les apprendre via C. Suite à cela je pourrais trouver logique/mieux comprendre le C.

  6. #26
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    Citation Envoyé par kripteks Voir le message
    Bon, j'ai décidé de m'y mettre à l'assembleur, car c'est plus explicite pour apprendre ces détails, je ne penses pas les apprendre via C. Suite à cela je pourrais trouver logique/mieux comprendre le C.
    Oui c'est toujours un plus de connaitre les bases de l'assembleur (pas besoin de devenir un expert). Le langage C étant un langage assez bas niveau, l'analogie entre le C et l'ASM est assez simple à comprendre.
    => avec les langage haut niveau qui sont de plus en plus utilisés, les programmeurs ont de moins en moins de connaissances sur le hardware et la gestion de la mémoire.

    Les principales notions qu'il faut connaitre :
    - La notion d'adressage et de bank mémoire. La notion de bus (hardware).
    - La notion de registres.
    - La notion d'instruction CPU (code machine).
    - La notion de pile logicielle et hardware.
    - Les interruptions.

    J'ai pas mal appris en analysant des codes sources ASM générés à partir d'un code C (ex: comment faire une opération arithmétique, comment sont passés les arguments dans une fonction, ...).

  7. #27
    Membre éclairé
    Inscrit en
    Juillet 2012
    Messages
    231
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 231
    Points : 870
    Points
    870
    Par défaut
    Citation Envoyé par Obsidian
    Ce qui est intéressant, c'est que c'est là quelque chose qui est propre à l'architecture cible et qu'à ma connaissance, bien que la norme évoque fréquemment les questions d'alignement, à aucun moment elle ne définit cela comme undefined behavour pour ce cas précis.
    Si si, la norme le définit bien comme un undefined behavior, Cf. Annexe J2 :
    Citation Envoyé par ISO/IEC 9899:TC3, J.2 Undefined behavior
    Conversion between two pointer types produces a result that is incorrectly aligned (6.3.2.3)
    Et la section 6.3.2.3, paragraphe 7 :
    Citation Envoyé par ISO/IEC 9899:TC3, 6.3.2.3 Pointers §7
    A pointer to an object or incomplete type may be converted to a pointer to a different object or incomplete type. If the resulting pointer is not correctly aligned for the pointed-to type, the behavior is undefined.

Discussions similaires

  1. Définir dbConnection sans utiliser le fichierApp Config
    Par tinhinan6 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 03/04/2014, 13h09
  2. Utilisation indice pour définir la div utilisée
    Par tijoh dans le forum jQuery
    Réponses: 2
    Dernier message: 04/07/2013, 15h57
  3. Réponses: 3
    Dernier message: 08/01/2008, 16h53
  4. [VS 2005] Comment définir la version du framework à utiliser?
    Par therock dans le forum Visual Studio
    Réponses: 1
    Dernier message: 04/08/2006, 05h08
  5. Réponses: 7
    Dernier message: 07/09/2004, 14h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo