为什么我们有" EventMaskType"在最后一行两次?

时间:2016-03-30 23:46:59

标签: c operating-system

我在OS源代码文件中找到了以下C代码。这3行包含在三个不同的源文件中。为什么我们有" EventMaskType"在最后一行两次?即使我删除了第一次出现" EventMaskType"它也给了我相同的输出。从第三行开始。

typedef unsigned long uint64_t;
typedef uint64_t        EventMaskType;
#define EVENT_MASK_OsEvent1  EventMaskType((EventMaskType)1u<<1)

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)替换。

反过来又是值1uunsigned int),它是使用&#34;经典C风格的演员&#34;类型为EventMaskType的值(unsigned long,因此代替投射,也可以写1ul)。然后将此值向左移动一位(结果2ul),最后使用功能样式转换转换为EventMaskType ......

EventMaskType( /* ... */)

......它没有改变任何东西,因为它已经属于那种类型。