Tout est un peu dans le titre... Quelle est la différence entre, mettons
#define ENTIER unsigned long int
et
typedef {unsigned long int} entier
D'un point de vue technique, je comprends bien que la première
instruction est traitée par le préprocesseur, alors que la deuxième
s'adresse au compilateur. Mais concrètement, à l'usage, faut-il préférer
l'une à l'autre ? toujours ou dans certains cas ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Pierre Maurette
Bonjour,
Tout est un peu dans le titre... Quelle est la différence entre, mettons
#define ENTIER unsigned long int
et
typedef {unsigned long int} entier
D'un point de vue technique, je comprends bien que la première instruction est traitée par le préprocesseur, alors que la deuxième s'adresse au compilateur. Mais concrètement, à l'usage, faut-il préférer l'une à l'autre ? toujours ou dans certains cas ?
Pour moi, il est évident qu'il faut utiliser le typedef si on définit un type. Le compilateur fera les vérifications adéquates. C'est tellement évident que j'ai du mal à donner dans la minute des raisons objectives ;-) Un exemple quand même:
#define PINT int* typedef int* pint_t; PINT p1, p2; // p1 est un pointeur, mais p2 est un int pint_t p3, p4;
Pensez à choisir un nommage efficace. Je suffixe en _t pour les types, mais ce n'est peut-être pas l'idéal, car c'est la convention de la norme. Je n'en sais rien...
-- Pierre Maurette
Bonjour,
Tout est un peu dans le titre... Quelle est la différence entre, mettons
#define ENTIER unsigned long int
et
typedef {unsigned long int} entier
D'un point de vue technique, je comprends bien que la première instruction
est traitée par le préprocesseur, alors que la deuxième s'adresse au
compilateur. Mais concrètement, à l'usage, faut-il préférer l'une à l'autre ?
toujours ou dans certains cas ?
Pour moi, il est évident qu'il faut utiliser le typedef si on définit
un type. Le compilateur fera les vérifications adéquates.
C'est tellement évident que j'ai du mal à donner dans la minute des
raisons objectives ;-)
Un exemple quand même:
#define PINT int*
typedef int* pint_t;
PINT p1, p2; // p1 est un pointeur, mais p2 est un int
pint_t p3, p4;
Pensez à choisir un nommage efficace. Je suffixe en _t pour les types,
mais ce n'est peut-être pas l'idéal, car c'est la convention de la
norme. Je n'en sais rien...
Tout est un peu dans le titre... Quelle est la différence entre, mettons
#define ENTIER unsigned long int
et
typedef {unsigned long int} entier
D'un point de vue technique, je comprends bien que la première instruction est traitée par le préprocesseur, alors que la deuxième s'adresse au compilateur. Mais concrètement, à l'usage, faut-il préférer l'une à l'autre ? toujours ou dans certains cas ?
Pour moi, il est évident qu'il faut utiliser le typedef si on définit un type. Le compilateur fera les vérifications adéquates. C'est tellement évident que j'ai du mal à donner dans la minute des raisons objectives ;-) Un exemple quand même:
#define PINT int* typedef int* pint_t; PINT p1, p2; // p1 est un pointeur, mais p2 est un int pint_t p3, p4;
Pensez à choisir un nommage efficace. Je suffixe en _t pour les types, mais ce n'est peut-être pas l'idéal, car c'est la convention de la norme. Je n'en sais rien...
-- Pierre Maurette
Laurent Deniau
Pierre Maurette wrote:
Bonjour,
Tout est un peu dans le titre... Quelle est la différence entre, mettons
#define ENTIER unsigned long int
et
typedef {unsigned long int} entier
ceci ne compile pas.
D'un point de vue technique, je comprends bien que la première instruction est traitée par le préprocesseur, alors que la deuxième s'adresse au compilateur. Mais concrètement, à l'usage, faut-il préférer l'une à l'autre ? toujours ou dans certains cas ?
Pour moi, il est évident qu'il faut utiliser le typedef si on définit un type. Le compilateur fera les vérifications adéquates.
Tu veux dire lors de la definition du typedef au lieu de l'utilisation du define, plus tardive?
C'est tellement évident que j'ai du mal à donner dans la minute des raisons objectives ;-)
La seule raison valable que je connaisse, c'est quand on veut faire de la meta-programmation avec le preprocesseur qui necessiterait la connaissance de certains types. Dans tous les autres cas, le typedef me semble plus adapte.
Un exemple quand même:
#define PINT int* typedef int* pint_t; PINT p1, p2; // p1 est un pointeur, mais p2 est un int
Et tu trouves ca bien?
pint_t p3, p4;
Je prefere de loin.
Pensez à choisir un nommage efficace. Je suffixe en _t pour les types, mais ce n'est peut-être pas l'idéal, car c'est la convention de la norme. Je n'en sais rien...
Yep.
a+, ld.
Pierre Maurette wrote:
Bonjour,
Tout est un peu dans le titre... Quelle est la différence entre, mettons
#define ENTIER unsigned long int
et
typedef {unsigned long int} entier
ceci ne compile pas.
D'un point de vue technique, je comprends bien que la première
instruction est traitée par le préprocesseur, alors que la deuxième
s'adresse au compilateur. Mais concrètement, à l'usage, faut-il
préférer l'une à l'autre ? toujours ou dans certains cas ?
Pour moi, il est évident qu'il faut utiliser le typedef si on définit un
type. Le compilateur fera les vérifications adéquates.
Tu veux dire lors de la definition du typedef au lieu de l'utilisation
du define, plus tardive?
C'est tellement évident que j'ai du mal à donner dans la minute des
raisons objectives ;-)
La seule raison valable que je connaisse, c'est quand on veut faire de
la meta-programmation avec le preprocesseur qui necessiterait la
connaissance de certains types. Dans tous les autres cas, le typedef me
semble plus adapte.
Un exemple quand même:
#define PINT int*
typedef int* pint_t;
PINT p1, p2; // p1 est un pointeur, mais p2 est un int
Et tu trouves ca bien?
pint_t p3, p4;
Je prefere de loin.
Pensez à choisir un nommage efficace. Je suffixe en _t pour les types,
mais ce n'est peut-être pas l'idéal, car c'est la convention de la
norme. Je n'en sais rien...
Tout est un peu dans le titre... Quelle est la différence entre, mettons
#define ENTIER unsigned long int
et
typedef {unsigned long int} entier
ceci ne compile pas.
D'un point de vue technique, je comprends bien que la première instruction est traitée par le préprocesseur, alors que la deuxième s'adresse au compilateur. Mais concrètement, à l'usage, faut-il préférer l'une à l'autre ? toujours ou dans certains cas ?
Pour moi, il est évident qu'il faut utiliser le typedef si on définit un type. Le compilateur fera les vérifications adéquates.
Tu veux dire lors de la definition du typedef au lieu de l'utilisation du define, plus tardive?
C'est tellement évident que j'ai du mal à donner dans la minute des raisons objectives ;-)
La seule raison valable que je connaisse, c'est quand on veut faire de la meta-programmation avec le preprocesseur qui necessiterait la connaissance de certains types. Dans tous les autres cas, le typedef me semble plus adapte.
Un exemple quand même:
#define PINT int* typedef int* pint_t; PINT p1, p2; // p1 est un pointeur, mais p2 est un int
Et tu trouves ca bien?
pint_t p3, p4;
Je prefere de loin.
Pensez à choisir un nommage efficace. Je suffixe en _t pour les types, mais ce n'est peut-être pas l'idéal, car c'est la convention de la norme. Je n'en sais rien...
Yep.
a+, ld.
Harpo
Pierre Maurette wrote:
mais ce n'est peut-être pas l'idéal, car c'est la convention de la norme.
J'adore...
-- http://patrick.davalan.free.fr/
Pierre Maurette wrote:
mais ce n'est peut-être pas l'idéal, car c'est la convention de
la norme.
mais ce n'est peut-être pas l'idéal, car c'est la convention de la norme.
J'adore...
-- http://patrick.davalan.free.fr/
Vincent Lefevre
Dans l'article , Pierre Maurette écrit:
Bonjour,
Tout est un peu dans le titre... Quelle est la différence entre, mettons
#define ENTIER unsigned long int
et
typedef {unsigned long int} entier
Pour moi, il est évident qu'il faut utiliser le typedef si on définit un type. Le compilateur fera les vérifications adéquates.
Pas plus. Un typedef ne permet pas de définir un type, mais un alias d'un type existant (sans le typedef). Bref, d'un certain point de vue, le typedef est assez similaire au préprocesseur, sauf qu'il intervient à un niveau sémantique et permet de faire des constructions impossibles à faire avec le préprocesseur (e.g. si le type en question est un pointeur).
Dans l'article <mn.31df7d6bb5bf9ed0.31483@laposte.net>,
Pierre Maurette <maurettepierre@wanadoo.fr> écrit:
Bonjour,
Tout est un peu dans le titre... Quelle est la différence entre, mettons
#define ENTIER unsigned long int
et
typedef {unsigned long int} entier
Pour moi, il est évident qu'il faut utiliser le typedef si on définit
un type. Le compilateur fera les vérifications adéquates.
Pas plus. Un typedef ne permet pas de définir un type, mais un alias
d'un type existant (sans le typedef). Bref, d'un certain point de
vue, le typedef est assez similaire au préprocesseur, sauf qu'il
intervient à un niveau sémantique et permet de faire des constructions
impossibles à faire avec le préprocesseur (e.g. si le type en question
est un pointeur).
Tout est un peu dans le titre... Quelle est la différence entre, mettons
#define ENTIER unsigned long int
et
typedef {unsigned long int} entier
Pour moi, il est évident qu'il faut utiliser le typedef si on définit un type. Le compilateur fera les vérifications adéquates.
Pas plus. Un typedef ne permet pas de définir un type, mais un alias d'un type existant (sans le typedef). Bref, d'un certain point de vue, le typedef est assez similaire au préprocesseur, sauf qu'il intervient à un niveau sémantique et permet de faire des constructions impossibles à faire avec le préprocesseur (e.g. si le type en question est un pointeur).