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 :

L'operateur sizeof et compilateur


Sujet :

C

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 27
    Points : 89
    Points
    89
    Par défaut L'operateur sizeof et compilateur
    Une question qui trotte dans ma tête :

    Apparemment sizeof est un opérateur, l'expression serait donc évaluée à l’exécution. Mais comme le C est un langage fortement typé, on est sensé savoir le résultat à la compilation.

    Intérêt d'évaluer l'expression l’exécution ? Y aurait il une optimisation par le compilateur ?

    Merci d'avance

  2. #2
    Membre expérimenté

    Homme Profil pro
    Collégien
    Inscrit en
    Juillet 2010
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2010
    Messages : 545
    Points : 1 429
    Points
    1 429
    Par défaut
    Salut,

    Je ne saurais pas dire si le mot clef sizeof est un opérateur ou non. Pas contre je peut t’assurer qu'il est évalué à la compilation.

    @+

  3. #3
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    sizeof est un opérateur unaire (voir n1256, §6.5.3). Sa sémantique est expliquée au §6.5.3.4 du même document.

    L'opérateur sizeof est évalué à la compilation et non à l'exécution.

    Avec mes meilleures salutations

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  4. #4
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 27
    Points : 89
    Points
    89
    Par défaut
    Merci pour votre réponse

    Ça confirme bien ce que je pensais.

  5. #5
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    L'opérateur sizeof est évalué à la compilation et non à l'exécution.
    Exception faite naturellement pour les VLA du C99 qui ne peuvent être évalués qu'à l'exécution
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 372
    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 372
    Points : 23 628
    Points
    23 628
    Par défaut
    Citation Envoyé par bonnotguillaume Voir le message
    Apparemment sizeof est un opérateur, l'expression serait donc évaluée à l’exécution. Mais comme le C est un langage fortement typé, on est sensé savoir le résultat à la compilation.
    J'ajoute que le fait qu'un élément lexical soit ou non un opérateur est complètement indépendant, en soi, du fait d'être résolu à la compilation ou évalué à l'exécution : si une expression n'est composée que d'opérateurs et de constantes et que sa valeur peut être déterminée par le compilateur, alors celui-ci la résoudra avant de générer le code.

    L'ambiguïté vient du fait que sizeof est le seul mot-clé réservé du C qui soit en lui-même une fonction mathématique (c'est-à-dire une expression qui peut être évaluée, d'une part, et dont la valeur est fonction de son paramètre, d'autre part). Ça laisse notamment penser aux gens que sizeof prend toujours des parenthèses alors qu'en fait, il n'en prend jamais. On les met en fait autour d'un nom de type lorsque l'on veut connaître sa taille intrinsèque (même syntaxe qu'un cast). Sinon, le compilateur estime que les parenthèses font partie de l'expression à faire examiner par sizeof, mais pas à sizeof lui-même.

    Par contre, sizeof est bien un mot-clé réservé et pas une fonction au sens C du terme. À part les VLA, tout est résolu à la compilation et, par exemple, il n'est pas possible d'obtenir un pointeur vers une éventuelle « fonction sizeof() ».

Discussions similaires

  1. operateur sizeof de classes
    Par ludovic.barrillie dans le forum C++
    Réponses: 10
    Dernier message: 07/10/2007, 17h48
  2. [langage]Compilateur PERL
    Par major2 dans le forum Langage
    Réponses: 4
    Dernier message: 07/02/2007, 21h52
  3. Compilateur - editeur C++ pour Linux
    Par Torpedox dans le forum Choisir un environnement de développement
    Réponses: 5
    Dernier message: 15/09/2002, 02h16
  4. Newbie......compilateur et table de caractères
    Par Cyberf dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 21/08/2002, 14h29
  5. Compilateur natif ??? Kesako ???
    Par Riko dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 06/08/2002, 08h54

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