typeof opérateur en C

Est typeof en C, vraiment un opérateur?
Je pense parce qu'il n'y a pas de polymorphisme en C, qu'il n'y a rien à faire à l'exécution. Autrement dit, 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.) Donc, il semble être plus une directive de compilation qu'un opérateur.

Typeof utilise-t-il une exécution (processeur) (dans GCC)?

37
demandé sur Doug 2012-08-23 01:12:54

4 réponses

Puisque typeof est une extension de compilateur, il n'y a pas vraiment de définition pour cela, mais dans la tradition de 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 de variables modifiées (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.

43
répondu Jens Gustedt 2013-08-26 11:05:39

C'est une extension GNU. En un mot, c'est un moyen pratique de déclarer un objet ayant le 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. */

Il fonctionne entièrement à la compilation et il est principalement utilisé dans les macros. Un célèbre exemple de macro s'appuyant sur typeof est container_of.

26
répondu cnicutar 2012-08-22 22:11:58

C'est une extension C du compilateur GCC, voir http://gcc.gnu.org/onlinedocs/gcc/Typeof.html

7
répondu André Oriani 2012-08-22 21:15:23

Ce n'est pas exactement un opérateur, mais plutôt un mot-clé. et non, il ne fait pas de magie d'exécution.

3
répondu Antonio 2018-08-06 14:49:27