7
votes

Taille de l'opérateur retourne 4 pour (char + court)

Compte tenu de cet extrait de code:

    #include <stdio.h>

    int main() {

        short i = 20;
        char c = 97;

        printf("%d, %d, %d\n", sizeof(i), sizeof(c), sizeof(c + i));

        return 0;
    }

c

5 commentaires

Promotion entière?


(C + I) est ajouté en premier et la taille de la taille est calculée pour le résultat .. Le résultat est un entier .. donc la taille est 4 ..


Nitpick: Tailleof n'est pas une fonction, c'est un opérateur.


N'oubliez pas: Tailleof () est l'opérateur de temps de compilation, le type d'expression est connu au moment de la compilation, les types d'opérations arithmétiques en C nécessitent une convertie de deux opérandes à un type commun à des promotions intégrées ,


@RaghusrikantHreddy: aucun ajout n'est effectué. Tailleof est utilisé lors de la compilation, sauf l'exception en cas de VLAS.


3 Réponses :


17
votes

c + i est une expression entière (entier Promotion!), donc Tailleof () retourne Tailleof (int)


0 commentaires

3
votes

Le C utilise int pour tous les calculs entier, si non spécifié autrement. Sur votre plate-forme, int est clairement 32bit long, donc Tailleof renvoie 4 . Si votre compilateur utiliserait des entiers 64 bits, ce serait 8 .


2 commentaires

Un peu de mertopique, mais y a-t-il un compilateur connu qui utilise 64 bits d'intens?


C'est plus sur l'architecture actuelle - par exemple SPARC64 - ILP64 / SILP64



4
votes

Les types d'entiers plus petits que INT sont promus lorsqu'une opération est effectué sur eux. Si toutes les valeurs du type d'origine peuvent être représenté comme in int, la valeur du type plus petit est convertie en un int; Sinon, il est converti en un Int non signé.

Les promotions entière nécessitent la promotion de chaque variable (C et I) à la taille InT. xxx


1 commentaires

Sharing de chapitre intéressant avec vous conversions de l'opérateur : Conversions arithmétiques