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 :

Valeur negatif hexadecimal dans define ?


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 84
    Points : 69
    Points
    69
    Par défaut Valeur negatif hexadecimal dans define ?
    Bonjour,

    Je cherche le moyen d'initialiser une chaine de caractère avec des nombres dans chaque " cases ", comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char s[4];
     
    s[0] = '10';
    s[1] = '32';
    s[2] = '56';
    s[3] = '\0';
    Pour ce faire j'écris le chiffre en hexadecimal, exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #define EXEMPLE "\xA\x20\x38\0"
    Cependant, je fais comment si je veux que ma define possède des chiffres négatif ? Pour le caractère 0 par exemple -0xA, mais ma define ne passe pas la compilation ...
    Merci pour votre aide.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 627
    Points : 10 548
    Points
    10 548
    Par défaut
    Il faut regarder la norme, mais, la valeur du signe c'est le bit le plus à gauche

    Pour 3, c'est "00000011", donc avec un char négatif, c'est 10000011 soit 0x83.
    Avec un short (16 bits), c'est 0x8003

    Édit: Ceci c'est pour les nombres flottants. Pour les entiers, on utilise le complément à 2 qui permet de faire des additions.
    Mais, la valeur du signe c'est le bit le plus à gauche


    Le mieux c'est de stocker en plus de ton nombre un booléen "is_positive"/ "is_negative"

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 84
    Points : 69
    Points
    69
    Par défaut
    hum ce que tu me dis foetus ne m'arrange pas du tout, je voulais évité de rajouter une variable à ma structure uniquement pour deux cas ... je vais voir si je peux pas faire autrement, en attendant je laisse encore le topic ouvert voir s'il y a pas d'autres solution, merci

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 600
    Points
    23 600
    Par défaut
    Bonjour,

    Citation Envoyé par sbill Voir le message
    Je cherche le moyen d'initialiser une chaine de caractère avec des nombres dans chaque " cases ", comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char s[4];
     
    s[0] = '10';
    s[1] = '32';
    s[2] = '56';
    s[3] = '\0';
    Les apostrophes « ' ' » servent à désigner un caractère isolé et renvoient la valeur de ce caractère, c'est-à-dire son code ASCII ou plus généralement sa position dans la table de caractères en vigueur. Ils doivent donc contenir soit le caractère concerné, soit une séquence spéciale qui le désigne comme « \n », « \r », « \t », ou « \0 » pour le caractère nul. L'expression entière est alors de type char, donc un type numérique entier.

    Par conséquent, si tu connais déjà les valeurs de ces caractères, alors il faut les spécifier directement, sans les apostrophes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    s[0] = 10;
    s[1] = 32;
    s[2] = 56;
    s[3] = 0;
    … et comme il s'agit alors de types numériques ordinaires, rien ne t'empêche de les préfixer par un signe « moins » :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    s[0] = -10;
    s[1] = -32;
    s[2] = -56;
    s[3] = -0;
    Enfin, il est important de noter que comme les apostrophes forment une expression de type entier, celle-ci peut elle aussi être soumise aux règles de l'arithmétique et être préfixée par un « - » si nécessaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    s[0] = -'A';
    s[1] = -'B';
    s[2] = -'C';
    s[3] = 0;


    Pour ce faire j'écris le chiffre en hexadecimal, exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #define EXEMPLE "\xA\x20\x38\0"
    Cependant, je fais comment si je veux que ma define possède des chiffres négatif ? Pour le caractère 0 par exemple -0xA, mais ma define ne passe pas la compilation ...
    Merci pour votre aide.
    Ce n'est pas faisable directement au sein d'une chaîne et il me semble que la norme précise que des caractères ainsi spécifiés sont de type « unsigned char », mais je ne sais plus si c'est systématique ou seulement en cas de dépassement. Quoi qu'il en soit, rien ne t'empêche d'utiliser la méthode ci-dessus et d'appliquer ensuite le même négateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    s[0] = -0x0a;
    s[1] = -0x20;
    s[2] = -0x38;
    s[3] = -0x0;
    Citation Envoyé par foetus Voir le message
    Il faut regarder la norme, mais, la valeur du signe c'est le bit le plus à gauche

    Pour 3, c'est "00000011", donc avec un char négatif, c'est 10000011 soit 0x83.
    Avec un short (16 bits), c'est 0x8003
    Oulala ! Pas du tout !

    Les entiers en C suivent le binaire naturel : « -3 » sur huit bits s'écrit « 11111101 » , soit « 0xFD ». Le fait d'utiliser exactement la moitié de la plage pour les nombres positifs ou nuls et l'autre pour les négatifs, sachant qu'un bit peut prendre exactement deux valeurs, fait que le bit de poids fort d'un entier va toujours être nul dans le premier cas et valoir 1 dans l'autre. Cela se démontre aisément et peut donc être garanti. Mais c'est là une conséquence directe du mode de calcul et pas une convention posée d'emblée au départ.

    C'est à ne pas confondre avec les nombres à virgule flottante au format IEEE 754, qui est un format composite, défini par convention, géré logiciellement et pour lequel sont apparues ensuite des puces dédiées lorsqu'ils se sont définitivement imposés.

    Le mieux c'est de stocker en plus de ton nombre un booléen "is_positive"/ "is_negative"
    Je ne sais pas si c'était de l'ironie, mais tu es bien d'accord que ce n'est pas un conseil à donner.

  5. #5
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    La première réponse de fœtus est certainement la solution à ton problème. Regarde le principe du complément à deux.

  6. #6
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 186
    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 186
    Points : 17 126
    Points
    17 126
    Par défaut
    Je pense surtout que la bonne solution, c'est de regarder comment tu en es arrivé à cette technique, et si tu ne pourrais pas faire quelque chose de plus simple.

    Car regarder la valeur hexa d'une chaine pour initier un tableau d'entier, ca commence à être un peu gros.
    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

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 84
    Points : 69
    Points
    69
    Par défaut
    Bonsoir,

    Je pense surtout que la bonne solution, c'est de regarder comment tu en es arrivé à cette technique, et si tu ne pourrais pas faire quelque chose de plus simple.

    Car regarder la valeur hexa d'une chaine pour initier un tableau d'entier, ça commence à être un peu gros.
    Afin de contourner la norme d'epitech.

    J'ai des define correspondant au valeur des touches (chaine de caractères), que je compare avec celle entrée au clavier, si la touche correspond a une touche que je gère j'appelle la fonction correspondante. Exemple : (une partie du header et du "code" )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    /* HEADER */
    typedef struct s_type
    {
          char *key;
          void  (*f)();
    }
     
    /* CODE */
    //Declarer en globale (pour la norme) UP & DEL sont des defines
    static t_type key[] = 
    {
         {UP, &my_up},
         {DEL, &my_del},
         {NULL, NULL}
    };
    Si vous avez une solutions plus propre je suis preneur...

  8. #8
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 600
    Points
    23 600
    Par défaut
    Bonsoir,

    Citation Envoyé par sbill Voir le message
    Afin de contourner la norme d'epitech.
    Mais encore ?

    J'ai des define correspondant au valeur des touches (chaine de caractères), que je compare avec celle entrée au clavier, si la touche correspond a une touche que je gère j'appelle la fonction correspondante. Exemple : (une partie du header et du "code" )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    /* HEADER */
    typedef struct s_type
    {
          char *key;
          void  (*f)();
    }
     
    /* CODE */
    //Declarer en globale (pour la norme) UP & DEL sont des defines
    static t_type key[] = 
    {
         {UP, &my_up},
         {DEL, &my_del},
         {NULL, NULL}
    };
    Cette manière de faire est plutôt une bonne chose. Mais j'ai du mal à voir le rapport avec le message initial et avec le problème qui t'occupe aujourd'hui…

  9. #9
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Cette manière de faire est plutôt une bonne chose.
    modulo le fait que ça génère beaucoup de pointeurs de fonctions (call *eax ? vecteur d'exploitation toussa...) là où un switch/case aurait probablement suffit, à mon humble avis...

    Mais j'ai du mal à voir le rapport avec le message initial et avec le problème qui t'occupe aujourd'hui…
    idem

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 84
    Points : 69
    Points
    69
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mais j'ai du mal à voir le rapport avec le message initial et avec le problème qui t'occupe aujourd'hui…
    Mon but est de créer une define avec les valeur -62 -70, cependant comme vous avez dit précédemment, je ne peux pas le faire de cette manière #define KEY "\x3e\x66" à cause des valeurs négatifs. Une des ( seule ? ) possibilités est de faire comme as dit Obsidian :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    s[0] = -10;
    s[1] = -32;
    s[2] = -56;
    s[3] = -0;
    Je ne sais pas comment l'appliquer à mon cas (tableau de structure), j'ai le droit à 25 lignes par fonctions.

  11. #11
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    je suis à peu près certain qu'aucune lib ne définit KEY_UP comme étant une valeur négative, il sort d'où ton -10 ??

    par ailleurs on sait toujours pas ce que c'est que s.

  12. #12
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 186
    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 186
    Points : 17 126
    Points
    17 126
    Par défaut
    Et bien, tu fais des instructions intelligentes, comme:
    int s[] = {-10, -32, -72, 0, ...};

    Une variable globale n'est pas une statique dans un header.
    Ca, ce sont des variables globales (par leur portée de déclaration), chacune visible uniquement dans l'unité de compilation où la définition est incluse (static).

    Une vraie globale, c'est une déclaration (extern) dans l'en-tête, et une (et une seule) définition dans une seule unité de compilation.
    Et cette définition peut du coup parfaitement être faite au format tableau.

    Bien évidemment, je recommande vivement l'usage d'une macro pour la taille du tableau.
    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

  13. #13
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par sbill Voir le message
    je ne peux pas le faire de cette manière #define KEY "\x3e\x66" à cause des valeurs négatifs.
    bon moi je suis complètement paummé je pige rien à cette histoire d'hexadécimal négatif
    reste que je vois toujours pas le rapport entre son tableau de char et ses structures plus haut

  14. #14
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 186
    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 186
    Points : 17 126
    Points
    17 126
    Par défaut
    c'est parce qu'il veut initialiser un tableau de char avec une chaine litérale, parce qu'il n'a pas le droit à plus de 25 lignes dans une fonction, ni à deux instructions par lignes.

    Bref, sous couvert d'un bon principe ("faire des fonctions courtes"), mais par une trop grande rigueur, on ne lui laisse pas d'autre choix que de se démerder.
    Et la bidouille qu'il a trouvé n'est pas si bête, mais n'a rien d'un code convenable ou lisible.
    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

  15. #15
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par leternel Voir le message
    c'est parce qu'il veut initialiser un tableau de char avec une chaine litérale, parce qu'il n'a pas le droit à plus de 25 lignes dans une fonction, ni à deux instructions par lignes.
    oui oui ça j'ai plus ou moins compris, mais c'est quoi qu'il initialise, un tableau de codes clavier ? son pointeur de fonction ? je vois pas du tout le rapport avec les structures dont il parlait plus tôt, ni l'intérêt de vouloir mettre des valeurs négatives dans ce qui peut probablement s'écrire en hexa avec un valeur 0x00..0xFF ou simplement en décimal non-signé puisque c'est manifestement un tableau de char qu'il veut remplir (un tableau de char s[4] avec des valeurs #define KEY "\x3e\x66", sentez pas qu'y a comme un malaise là ?)

  16. #16
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 84
    Points : 69
    Points
    69
    Par défaut
    Et bien, tu fais des instructions intelligentes, comme:
    int s[] = {-10, -32, -72, 0, ...};
    En tant normal, c'est ce que je fais mais ça passe pas cette foutu norme !

    reste que je vois toujours pas le rapport entre son tableau de char et ses structures plus haut
    Le tableau de char était un exemple de ce que je voulais faire avec ma structure, tu peux carrément l'oublier ^^.

    je suis à peu près certain qu'aucune lib ne définit KEY_UP comme étant une valeur négative, il sort d'où ton -10 ??
    C'est encore un exemple, la vrai touche est "Alt + u" qui correspond au code "-62 -70" (j'utilise library termcap).

    Une variable globale n'est pas une statique dans un header.
    Mon tableau de structure est déclarer dans un fichier .c en tant que globale "static", c'est-à-dire visible que depuis ce même fichier. ( Je boucle sur le tableau de structure, si le char *keycode correpond à ce qui est lu au clavier, j'appelle la fonction correspondante afin de traiter la touche).

    oui oui ça j'ai plus ou moins compris, mais c'est quoi qu'il initialise, un tableau de codes clavier ? son pointeur de fonction ?
    J'initialise le tableau de structure contenant une chaine de caractère et la fonction qui lui associé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    static t_type key[] = 
    {
         {UP, &my_up}, //# define UP \x1B\x5B\x41"
         {DEL, &my_del}, //# define DEL "\x7f"
         {XX}, &my_xx}, // -62 -70 impossible à écrire sous forme hexadecimal dans une define
         {NULL, NULL}
    };

  17. #17
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    Pourquoi ne pas faire une fonction d'initialisation dédiée, qui du coup pourra contenir 25 lignes ?


    Bon courage à toi !

  18. #18
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    les trois déclarations sont équivalentes :
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char s[] = {-10,-32,-72,0};
    char *s = (char *)0x00b8e0f6;
    char s[] = "\xf6\xe0\xb8\x00";

  19. #19
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 600
    Points
    23 600
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    les trois déclarations sont équivalentes :
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char s[] = {-10,-32,-72,0};
    char *s = (char *)0x00b8e0f6;
    char s[] = "\xf6\xe0\xb8\x00";
    Es-tu sûr de ta seconde proposition ?

  20. #20
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Es-tu sûr de ta seconde proposition ?
    ben... j'aurais tendance à dire que oui, en tous cas du point de vue finalité/code machine, du point de vue langage C à voir, mais tu me fous le doute d'un coup

    char s[] = {-10,-32,-72,0};
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (gdb) print &s
    $2 = (char (*)[4]) 0x7fffffffe0a0
    (gdb) x/x &s
    0x7fffffffe0a0: 0x00b8e0f6
    char *s = (char *)0x00b8e0f6;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (gdb) print &s
    $2 = (char **) 0x7fffffffe0a8
    (gdb) x/x &s
    0x7fffffffe0a8: 0x00b8e0f6

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 17
    Dernier message: 18/03/2005, 10h23
  2. Sélection valeur par défaut dans une zone de liste
    Par Cécile154 dans le forum IHM
    Réponses: 2
    Dernier message: 15/02/2005, 19h20
  3. Valeur par default dans un input file ?
    Par alainme dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 11/02/2005, 15h31
  4. Valeur par défaut dans une table objet
    Par Ricky81 dans le forum Oracle
    Réponses: 12
    Dernier message: 18/03/2004, 12h52
  5. Réponses: 2
    Dernier message: 23/11/2003, 19h44

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