s'il vous plaît quelqu'un peut-il me aider à mettre en œuvre l'opérateur sizeof()
dans c ..opérateur sizeof dans c
je sais que l'utilisation .. mais je n'a pas pu le mettre en œuvre.
s'il vous plaît quelqu'un peut-il me aider à mettre en œuvre l'opérateur sizeof()
dans c ..opérateur sizeof dans c
je sais que l'utilisation .. mais je n'a pas pu le mettre en œuvre.
Vous ne pouvez pas implémenter sizeof()
en tant que fonction de bibliothèque, il s'agit d'un compilateur intrinsèque. Est-ce que vous écrivez un compilateur?
par exemple si la sortie de sizeof ('t') den est 1 – RJV
@RAVI JV: Il est peu probable que le résultat de 'sizeof ('t')' soit '1' sur votre ordinateur car une constante de caractère est de type' int 'en C, pas' char' (oui, 'int' _could_ peut être d'un octet si un octet a au moins 16 bits, il est peu probable que vous ayez un système où c'est le cas). –
@James Etes-vous sûr de ça? Je suis assez sûr que 't' sera de type char qui est garanti à 8 octets ... –
Vous ne pouvez pas implémenter sizeof
en C; c'est un opérateur de base (vous ne pouvez pas non plus implémenter +
).
Vous pouvez écrire une macro qui a un sous-ensemble limité de comportement de sizeof
, en faisant quelque chose le long des lignes de:
#define thisIsAHorribleHackDontDoThis(a) \
((size_t)((intptr_t)(&a + 1) - (intptr_t)&a))
mais qui ne fonctionne que si a
est une lvalue (et il est horrible à voir). sizeof
n'est pas si limité, et c'est pourquoi vous devriez l'utiliser au lieu de réinventer une roue qui n'est pas réellement ronde.
Ou '#define mysizeof (type) ((taille_t) ((char *) ((type *) 0 + 1) - (char *) 0))' –
@R: il faut mélanger vos deux approches pour être "maximum" portable". 'intptr_t' n'est pas nécessairement défini mais' (char *) (void *) & a' est. D'un autre côté, si je me souviens bien, faire de l'arithmétique sur des pointeurs NULL est UB. –
est inférieure à la mise en œuvre de sizeof opérateur
#define SZOF(x) (size_t)(((x*)(0))+1)
qui ne fonctionne que pour certains * type * x; sizeof fonctionne également sur les noms de variables. Aussi, c'est à peu près la même chose que le commentaire de R. à la réponse de Stephen Canon, ci-dessus. –
Qu'avez-vous essayé? Où êtes-vous coincé? Avez-vous des erreurs? Est-ce que vous écrivez un compilateur? –
Non .. Je vais réellement mettre en œuvre le comportement de l'opérateur sizeof – RJV
par exemple si la sortie de sizeof ('t') den est 1 – RJV