Est-ce que typeof en C est vraiment un opérateur?
Je pense qu'il n'y a pas de polymorphisme en C, qu'il n'y a rien à faire au moment de l'exécution. C'est-à-dire que la réponse à typeof est connue au moment de la compilation. (Je ne peux pas penser à une utilisation de typeof qui ne serait pas connue au moment de la compilation.) Cela semble donc être davantage une directive de compilation qu'un opérateur.
Typeof utilise-t-il une exécution (processeur) (dans GCC)?
Puisque typeof
est une extension du compilateur, il n’existe pas vraiment de définition, mais dans la tradition du C, ce serait un opérateur, par exemple sizeof
et _Alignof
sont également considérés comme des opérateurs.
Et vous vous trompez, C a des types dynamiques qui ne sont déterminés qu’au moment de l’exécution: types modifiés (VM).
size_t n = strtoull(argv[1], 0, 0);
double A[n][n];
typeof(A) B;
ne peut être déterminé qu'au moment de l'exécution.
C’est une extension GNU. En un mot, c’est un moyen pratique de déclarer un objet du même type qu’un autre. Par exemple:
int x; /* Plain old int variable. */
typeof(x) y; /* Same type as x. Plain old int variable. */
Cela fonctionne entièrement à la compilation et il est principalement utilisé dans les macros. Un exemple célèbre de macro reposant sur typeof
est container_of
.
C’est une extension C du compilateur GCC, voir http://gcc.gnu.org/onlinedocs/gcc/Typeof.html
Ce n'est pas exactement un opérateur, mais un mot clé. Et non, cela ne fait aucune magie d'exécution.