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;