强制转换的一点补充
2009-03-19 11:28 ubunoon 阅读(287) 评论(0) 编辑 收藏 举报
通常使用C/C++的强制转换是(type)方式,今天偶尔碰到一个函数指针的定义,以及强制转换,忽然间变得不认识了。因此有必要做一下记录,首先定义了一个函数指针,INTERFACE_FINDER
然后定义了一个宏:
#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 方式,一般情况下都使用的是第二种方式,因此极易把第一种忘却掉。
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 方式,一般情况下都使用的是第二种方式,因此极易把第一种忘却掉。
/*
*
* Copyright (c) 2011 Ubunoon.
* All rights reserved.
*
* email: netubu#gmail.com replace '#' to '@'
* http://www.cnblogs.com/ubunoon
* 欢迎来邮件定制各类验证码识别,条码识别,图像处理等软件
* 推荐不错的珍珠饰品,欢迎订购 * 宜臣珍珠(淡水好珍珠) */
*
* Copyright (c) 2011 Ubunoon.
* All rights reserved.
*
* email: netubu#gmail.com replace '#' to '@'
* http://www.cnblogs.com/ubunoon
* 欢迎来邮件定制各类验证码识别,条码识别,图像处理等软件
* 推荐不错的珍珠饰品,欢迎订购 * 宜臣珍珠(淡水好珍珠) */