GNU/Linux >> Tutoriels Linux >  >> Linux

implémentation de la taille de l'opérateur

Le sizeof L'opérateur fait partie de la spécification du langage C (et C++) et est implémenté à l'intérieur du compilateur (le frontal). Il n'y a aucun moyen de l'implémenter avec d'autres constructions C (sauf si vous utilisez des extensions GCC comme typeof) car il peut accepter des types ou des expressions comme opérande, sans faire d'effet secondaire (par exemple sizeof((i>1)?i:(1/i)) ne plantera pas lorsque i==0 mais ta macro my_sizeof planterait avec une division par zéro). Voir également les directives de codage C et wikipedia.

Vous devez comprendre l'arithmétique du pointeur C. Voir par ex. cette question. La différence de pointeur est exprimée en éléments et non en octets.


Le résultat de la soustraction du pointeur est en éléments et non en octets. Ainsi, la première expression vaut 1 par définition.

Ceci mis à part, vous devriez vraiment utiliser des parenthèses dans les macros :

#define my_sizeof(x) ((&x + 1) - &x)
#define my_sizeof(x) ((char *)(&x + 1) - (char *)&x)

Sinon, essayez d'utiliser my_sizeof() dans une expression peut conduire à des erreurs.


Linux
  1. 7 exemples d'opérateurs Awk puissants (opérateurs unaires, binaires, arithmétiques, de chaîne, d'affectation, conditionnels, Reg-Ex Awk)

  2. 7 Exemples d'opérateurs Linux Grep OR, Grep AND, Grep NOT

  3. Implémentation de plusieurs tuyaux en C

  4. Implémentation des variables de condition

  5. L'accès au tas est-il sérialisé ?

Alibaba Dragonwell8 :l'implémentation interne d'OpenJDK chez Alibaba

Correction "Implémentation du contrôleur USB 2.0 introuvable!" Erreur VirtualBox

Comment créer un certificat TLS/SSL avec un opérateur Cert-Manager sur OpenShift

C++ nouvel opérateur de sécurité des threads dans Linux et gcc 4

[ :Opérateur inattendu en programmation shell

Quelle est la plus petite implémentation Linux possible ?