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

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 149
    Points : 68
    Points
    68
    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 Expert

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

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    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 du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 149
    Points : 68
    Points
    68
    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 du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 149
    Points : 68
    Points
    68
    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 actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 258
    Points : 288
    Points
    288
    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 du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 149
    Points : 68
    Points
    68
    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 actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 258
    Points : 288
    Points
    288
    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
    Responsable technique

    Avatar de Anomaly
    Homme Profil pro
    Directeur
    Inscrit en
    Juin 2003
    Messages
    10 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Somme (Picardie)

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 342
    Points : 130 373
    Points
    130 373
    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 habitué 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
    Points : 166
    Points
    166
    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
    Responsable technique

    Avatar de Anomaly
    Homme Profil pro
    Directeur
    Inscrit en
    Juin 2003
    Messages
    10 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Somme (Picardie)

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 342
    Points : 130 373
    Points
    130 373
    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 du Club

    Inscrit en
    Mai 2003
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 39
    Points : 67
    Points
    67
    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 du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

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

  13. #13
    Membre habitué 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
    Points : 194
    Points
    194
    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 du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 149
    Points : 68
    Points
    68
    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 actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 258
    Points : 288
    Points
    288
    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 habitué 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
    Points : 194
    Points
    194
    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 : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    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