相关疑难解决方法(0)

什么是uintptr_t数据类型

什么是uintptr_t以及它可以用于什么?

c++ types pointers

233
推荐指数
5
解决办法
16万
查看次数

将函数指针转换为 uintptr_t / intptr_t 无效吗?

Microsoft 对 C 和 C++ 的扩展

要执行相同的转换并保持 ANSI 兼容性,您可以在将函数指针转换uintptr_t为数据指针之前将其转换为 a:

int ( * pfunc ) ();
int *pdata;
pdata = ( int * ) (uintptr_t) pfunc;
Run Code Online (Sandbox Code Playgroud)

C 的基本原理,修订版 5.10,2003 年 4 月:

即使使用显式强制转换,将函数指针转换为对象指针或 void 指针也是无效的,反之亦然

C11:

7.20.1.4 能够保存对象指针的整数类型

是否意味着pdata = ( int * ) (uintptr_t) pfunc;无效?

正如史蒂夫·萨米特所说

C 标准的编写假设指向不同对象类型的指针,尤其是指向函数而不是对象类型的指针,可能具有不同的表示形式

虽然pdata = ( int * ) pfunc;会导致UB,但似乎会pdata = ( int * ) (uintptr_t) pfunc;导致IB。这是因为“任何指针类型都可以转换为整数类型”和“整数可以转换为任何指针类型”并且uintptr_t …

c type-conversion visual-c++ language-lawyer c11

6
推荐指数
1
解决办法
1244
查看次数

标签 统计

c ×1

c++ ×1

c11 ×1

language-lawyer ×1

pointers ×1

type-conversion ×1

types ×1

visual-c++ ×1