2017-06-02 1 views
-1

Que signifie " typedef NOT_LP64(uint16_t) LP64_ONLY(uint32_t) idx_t; "?Qu'est-ce que typedef avec plusieurs types à un alias?

Le code provient de jdk8, taskqueue.hpp.

Je ne comprends pas la syntaxe ci-dessus.

Je trouve beaucoup d'explications sur typedef type name, mais elles n'expliquent pas la situation ci-dessus.


NOT_LP64 et LP64_ONLY sont définis dans le fichier macro.hpp.

#ifdef _LP64 
#define LP64_ONLY(code) code 
#define NOT_LP64(code) 
#else // !_LP64 
#define LP64_ONLY(code) 
#define NOT_LP64(code) code 
#endif // _LP64 
+5

l'une des macros va se développer à rien – user463035818

+2

De 'LP64_ONLY' et' NOT_LP64', l'un d'entre eux se développera pour être son argument et l'autre se développera pour n'être rien. Il vous reste un 'typedef' avec un seul type, et un peu d'espace blanc supplémentaire. –

+0

Je vois. 'typedef' peut s'étendre à rien. C'est la raison. Je l'ai! – skytree

Répondre

7

Lorsque vous évaluez les macros, le code deviendra soit

typedef uint16_t idx_t; 

ou

typedef uint32_t idx_t; 

en fonction de la valeur de _LP64. Les deux n'ont qu'un seul type.

En général, ces macros peuvent être utilisées uniquement pour exécuter du code dans une circonstance ou dans l'autre. Dans ce cas précis, le "code" en question n'est qu'un seul type.