zoukankan      html  css  js  c++  java
  • 强制转换的一点补充

    通常使用C/C++的强制转换是(type)方式,今天偶尔碰到一个函数指针的定义,以及强制转换,忽然间变得不认识了。因此有必要做一下记录,首先定义了一个函数指针,INTERFACE_FINDER

    typedef DWORD (*INTERFACE_FINDER)(void* pThis, DWORD dwData);

    然后定义了一个宏:

    #define ENTRY_IS_OFFSET INTERFACE_FINDER(-1)

    对于这种表示方法,表示非常费解,只好在vc中进行测试了,结果表明与下面的宏定义是一致的:

    #define ENTRY_IS_OFFSET2 (INTERFACE_FINDER)(-1)

    也就是说INTERFACE_FINDER(-1)是一个强制转换工具,将-1强制转换为一个数据值0xffffffff。

    这是对于多个参数的,对于单个参数是否也是如此?我又进行了一下测试:

    typedef DWORD (*CHANGE_DWORD)(int i);

    #define CHANGE_OK CHANGE_DWORD(-1)

    发现CHANGE_OK的值仍旧为0xffffffff,再用int对double进行了一下测试,果然如此。

    也就是说C/C++中type(data) 等价于 (type)data 方式,一般情况下都使用的是第二种方式,因此极易把第一种忘却掉。
  • 相关阅读:
    [LUOGU] P3275 [SCOI2011]糖果
    [BZOJ] 2287: 【POJ Challenge】消失之物
    [BZOJ] 2131: 免费的馅饼
    [JZOJ] 5835. Prime
    [JZOJ] 5837.Omeed
    UF_CAMGEOM_ask_custom_points 封装缺陷
    NX Open 切削层加载
    NX Open 图层说
    c++ Dll调用
    VC操作Excel文件编程相关内容总结
  • 原文地址:https://www.cnblogs.com/ubunoon/p/1416432.html
Copyright © 2011-2022 走看看