Oracle® Solaris Studio 12.4:C 用户指南

退出打印视图

更新时间: 2014 年 12 月
 
 

7.3.1 整型和指针长度更改

由于整型和指针在 ILP32 编译环境中长度相同,因此某些代码依赖以下假定。通常会将指针强制转换为 intunsigned int 以进行地址运算。但是,由于 long 和指针在 ILP32 和 LP64 数据类型模型中长度相同,因此可以将指针强制转换为 long。请改用 uintptr_t,而不是显式使用 unsigned long。这样可以更详细地表达您的意图,并且使代码更易于移植,避免受到未来更改的影响。请看以下示例:

char *p;
p = (char *) ((int)p & PAGEOFFSET);
%
warning: conversion of pointer loses bits

修改后的版本为:

char *p;
p = (char *) ((uintptr_t)p & PAGEOFFSET);