C++ 一个别名具有多个类型的typedef是什么?

C++ 一个别名具有多个类型的typedef是什么?,c++,syntax,typedef,C++,Syntax,Typedef,什么是" typedef非LP64(uint16)仅LP64(uint32)idx; “什么意思 代码来自jdk8,taskqueue.hpp 我不懂上面的语法 我找到了许多关于typedef type name的解释,但它们没有解释上述情况 NOT_LP64和LP64_ONLY在macro.hpp文件中定义 #ifdef _LP64 #define LP64_ONLY(code) code #define NOT_LP64(code) #else // !_LP64 #define LP

什么是"
typedef非LP64(uint16)仅LP64(uint32)idx;
“什么意思

代码来自jdk8,
taskqueue.hpp

我不懂上面的语法

我找到了许多关于
typedef type name
的解释,但它们没有解释上述情况


NOT_LP64
LP64_ONLY
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

当您计算这些宏时,代码将变为

typedef uint16_t idx_t;

取决于
\u LP64
的值。两者只有一种类型


通常,这些宏只能用于在一种或另一种情况下运行代码。在这种特定情况下,所讨论的“代码”只是一种类型。

其中一个宏将展开为nothing of
LP64\u ONLY
NOT\u LP64
,其中一个将展开为它的参数,另一个将展开为nothing。剩下的
typedef
只有一种类型,还有一点额外的空白。我明白了<代码>类型定义可以扩展为零。这就是原因。明白了@天空树:不,类型定义不能是空的。再仔细看一遍。如果定义了
\u LP64
NOT\u LP64(uint16\u t)
将为空,而
LP64\u ONLY(uint32\u t)
将为
uint32\u t
。如果未定义
\u LP64
not\u LP64(uint16\u t)
将为
uint16\u t
LP64\u ONLY(uint32\u t)
将为空。但是无论哪种方式,
idx\u t
都将是某种东西的别名。这个问题实际上不是关于类型别名,而是关于什么是预处理器宏以及它们的行为。
typedef uint32_t idx_t;