代码之家  ›  专栏  ›  技术社区  ›  Andrew Truckle

在MAKEWORD/MAKEWPARAM中使用布尔值而不是BOOL值

  •  0
  • Andrew Truckle  · 技术社区  · 6 年前
    // Rebuild the "Assign Flags"
    m_dwStudentAssignFlags = MAKEWPARAM(
        MAKEWORD(bIncluded[INDEX(StudentAssign::kItem1)] ? TRUE : FALSE, bIncluded[INDEX(StudentAssign::kItem2)] ? TRUE : FALSE),
        MAKEWORD(bIncluded[INDEX(StudentAssign::kItem3)] ? TRUE : FALSE, bIncluded[INDEX(StudentAssign::kItem4)] ? TRUE : FALSE));
    

    bIncluded 是由4个类型元素组成的固定数组 boolean .

    上面的代码可以工作,但我想知道是否有什么具体的原因使我不能将代码简化为:

    // Rebuild the "Assign Flags"
    m_dwStudentAssignFlags = MAKEWPARAM(
        MAKEWORD(bIncluded[INDEX(StudentAssign::kItem1)], bIncluded[INDEX(StudentAssign::kItem2)]),
        MAKEWORD(bIncluded[INDEX(StudentAssign::kItem3)], bIncluded[INDEX(StudentAssign::kItem4)]));
    
    1 回复  |  直到 6 年前
        1
  •  4
  •   Remy Lebeau    6 年前

    MAKEWPARAM(a, b) 在引擎盖下使用C型铸造

    (unsigned long)(a)
    

    (unsigned __int64)(a)
    

    铸造 bool unsigned long unsigned __int64 完全有效,C++标准(4.7/4,[UNION.CONTION)保证铸件 false true 将产生 0 1

    如果源类型为 布尔 ,值 价值 是的 转换为1。

    FALSE TRUE #define s代表 1