web-dev-qa-db-fra.com

typeof opérateur en C

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)?

42
Doug

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.

52
Jens Gustedt

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.

27
cnicutar

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

7
André Oriani

Ce n'est pas exactement un opérateur, mais un mot clé. Et non, cela ne fait aucune magie d'exécution.

4
user529758