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 :

Recherche la signification d'expressions en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 152
    Par défaut Recherche la signification d'expressions en C
    Je recherche la signification
    (et si possible l'équivalent en Delphi)
    des expressions suivantes écrites en C :

    1a) reg int var1
    1b) reg int *var1
    1c) reg int **var1
    1d) static unsb tmp[15]

    2a) var1 ^ var2
    2b) var1 ^ *var2++

    3) ~var1

    4) var1 = ((long **) var2)

    5) var1 ^= (*stp++)[*var2++]

    6) *var1++ = var2

  2. #2
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Pour 1 a 6

    Pour moi le mieux c de me dire ce que tu veux faire
    fais le moi en mode texte parce que delphi j'ai jamais vraiment programmer avec

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 152
    Par défaut
    J'adapte une source C en Delphi
    et je bute sur ces 6 expressions
    que je ne comprends pas très bien.

    Dis moi juste "ce que cela veux dire en C",
    j'essayerai de trouver en Delphi.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 152
    Par défaut
    Solutions :

    1a)
    1b)
    1c)
    1d) tmp : Array[0..14]Of Byte; ? static ?

    2a) var1 xor var2
    2b) var1 xor (@var2 +1) ?

    3) not var1

    4) var1 := var2;

    5) var1 := var1 xor (@stp +1) [@var2 +1]; ?


    6) @var1 +1 := var2; ?

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 258
    Par défaut
    static unsb tmp[15] : Déclare un tableau à 15 entrées (0 à 14 inclus) de type unsb (doit être défini dans le fichier source).
    static : sert à allonger la portée d'une variable locale.

    var1 ^ var2 : var1 XOR var2 (Ou exclusif)

    var1 ^ *var2++ : var1 XOR (valeur contenue à l'adresse pointée par var2)
    Ensuite incrémenté l'adresse de 1 (avancer d'1 octet en mémoire).

    var1 = ((long **) var2)
    var1 = var2.
    var1 est de type long** et var2 de n'importe quel autre type.
    On fait donc un "cast" pour dire au compilateur que var2 est un long** (même si il ne l'est pas vraiment il sera utilisé comme tel).

    var1 ^= (*stp++)[*var2++]
    var1 = var1 XOR (valeur pointée par stp)[valeur pointée par var2]
    incrémenté stp et var2 de 1 octet (cf ci-dessus).

    *var1++ = var2
    Incrémenté l'adresse de var1 d'1 octet (càd avancé d'1 octet en mémoire) et attribué la valeur de var2 à la nouvelle valeur de var1 (nouvelle valeur car on a avancé dans la mémoire).


    Je sais c'est pas très clair mais c'est assez compliqué à expliquer

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 152
    Par défaut
    Merci.

    "static : sert à allonger la portée d'une variable locale"

    Afin que l'on puisse l'utiliser dans d'autres fonctions ou procédures ?
    Peux-tu préciser ?

  7. #7
    Membre très actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 258
    Par défaut
    Oui comme ca elle n'est pas détruite à la fin du block dans lequelle elle est exécutée.

    Tiens ce lien explique le fonctionnement du mot clefs statique :

    http://www.lri.fr/~aze/page_c/aide_c/static.html

  8. #8
    Expert éminent

    Avatar de Anomaly
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 380
    Billets dans le blog
    1
    Par défaut Re: Recherche la signification d'expressions en C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    1a) reg int var1
    1b) reg int *var1
    1c) reg int **var1
    Jamais vu de trucs pareils en C.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1d) static unsb tmp[15]
    Ne pas déclarer le type de la variable est obsolète (par défaut c'est int).

    STATIC a deux significations selon l'endroit où elle est déclarée :
    - dans une fonction : cela rend la variable persistante. A chaque appel de la fonction, elle se "souvient" de sa dernière valeur.
    - en-dehors d'une fonction : indique au lieur de pratiquer un câble interne (autrement dit, ne pas exporter le symbole aux autres modules).

    Le genre de syntaxe à éviter absolument. Tu affectes, suivi d'une incrémentation. C'est illisible et très souvent une erreur.

    Le reste a déjà été dit précédemment

  9. #9
    Membre expérimenté Avatar de Driden
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 146
    Par défaut Re: Recherche la signification d'expressions en C
    Citation Envoyé par Anomaly
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1d) static unsb tmp[15]
    Ne pas déclarer le type de la variable est obsolète (par défaut c'est int).
    Cette variable à un type c'est unsb qui doit etre defini dans un fichier.

  10. #10
    Expert éminent

    Avatar de Anomaly
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 380
    Billets dans le blog
    1
    Par défaut Re: Recherche la signification d'expressions en C
    Citation Envoyé par Driden
    Cette variable à un type c'est unsb qui doit etre defini dans un fichier.
    C'est exact, je devrais regarder avec plus d'attention.

  11. #11
    Membre confirmé

    Inscrit en
    Mai 2003
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 39
    Par défaut
    Citation Envoyé par sbadecoder
    "static : sert à allonger la portée d'une variable locale"

    Afin que l'on puisse l'utiliser dans d'autres fonctions ou procédures ?
    Peux-tu préciser ?
    Une variable static locale doit rester locale, d'ou son nom. Ça ne sert pas à ça. Ça allonge la durée de vie mais pas la portée.
    Si tu veux allonger sa portée tu la déclare globale.
    Ou alors tu l'alloues avec malloc.

    L'utilisation de ce genre d'astuces montre un défaut de conception, car c'est totalement à l'inverse de la philosophie du langage.

    static peut être utilisé par exemple pour faire une fonction qui se débrouille absolument toute seule pour créer une liste chainée au fur et à mesure des appels :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void AjoutElem(void) {
    static type_t* ptr=NULL;
    type_t* elem = malloc(sizeof(type_t));
    elem->pSuiv = ptr;
    ptr = elem;
    }

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 152
    Par défaut
    unsb veut dire unsigned byte

  13. #13
    Membre éclairé Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Par défaut
    Puisqu'on est dans les expressions bizarres, =~ ca veut dire quoi, je l'ai vu plusieurs fois sans jamais savoir ce que va signifiait ?

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 152
    Par défaut
    Idem que (je pense)

    3) ~var1

    tu dois avoir qqchose du genre:

    var1 = ~var2

    veut dire var1 = NOT var2 (inversion de chaque bit)

    si var2=00110011, alors var1=11001100 (écris en binaire)


    On va clore sur cela.
    Merci à tous.

  15. #15
    Membre très actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 258
    Par défaut
    Ce site est une référence dés qu'on se pose une question sur le C :
    http://www.lri.fr/~aze/page_c/aide_c/

    On y trouve :

    opérateur ~ opérateur NON bit-à-bit
    Maintenant pour le =~ il n'y apparait, donc tu es sur de l'avoir vu ??

  16. #16
    Membre éclairé Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Par défaut
    Oui, j'ai du le voir sous cette forme var1 = ~var2
    Je crois même l'avoir vu en assembleur aussi...

  17. #17
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par Yabo
    Maintenant pour le =~ il n'y apparait, donc tu es sur de l'avoir vu ??
    C'est tout simplement l'utilisation d'un operateur unaire dans une affectation, ce n'est pas un operateur a part entiere mais deux operateurs distinct, un peu comme si tu ecris var1=-var2.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL] Rechercher un mot, une expression
    Par fhmayn dans le forum Langage SQL
    Réponses: 9
    Dernier message: 16/12/2010, 18h08
  2. [AIDE]Signification d'expression javascript
    Par Diablo_22 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/03/2009, 09h39
  3. A la recherche de la bonne expression régulière
    Par sylvebarbe78 dans le forum Général JavaScript
    Réponses: 19
    Dernier message: 20/02/2009, 15h53
  4. Recherche de string avec expression régulière ?
    Par sbadecoder dans le forum Langage
    Réponses: 0
    Dernier message: 21/01/2008, 19h44
  5. Réponses: 5
    Dernier message: 30/10/2006, 13h59

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