我在OS源代码文件中找到了以下C代码。这3行包含在三个不同的源文件中。为什么我们有" EventMaskType"在最后一行两次?即使我删除了第一次出现" EventMaskType"它也给了我相同的输出。从第三行开始。
typedef unsigned long uint64_t;
typedef uint64_t EventMaskType;
#define EVENT_MASK_OsEvent1 EventMaskType((EventMaskType)1u<<1)
答案 0 :(得分:0)
typedef unsigned long uint64_t;
typedef uint64_t EventMaskType;
#define EVENT_MASK_OsEvent1 EventMaskType((EventMaskType)1u<<1)
第一行定义了名称unsigned long
下也称为uint64_t
的类型。正如评论中所指出的,这应该是标准标题stdint.h
的一部分。
第二行将EventMaskType
定义为uint64_t
类型的别名(因此传递为unsigned long
的别名)。
第三行定义了预处理器的符号宏,因此令牌EVENT_MASK_OsEvent1
的每次(后续)出现都将被EventMaskType((EventMaskType)1u<<1)
替换。
反过来又是值1u
(unsigned int
),它是使用&#34;经典C风格的演员&#34;类型为EventMaskType
的值(unsigned long
,因此代替投射,也可以写1ul
)。然后将此值向左移动一位(结果2ul
),最后使用功能样式转换转换为EventMaskType
......
EventMaskType( /* ... */)
......它没有改变任何东西,因为它已经属于那种类型。