在同一条线上铸造两次

2024-05-13

我在项目中看到了这段代码。

b的类型是void*:

void *b = ...;
int a = (int) (unsigned long) b;

这条线毫无意义吗?我的意思是,这与a = (int) b在所有情况下?


这可能会避免 64 位 Unix 系统上的编译器警告unsigned long是一个 64 位数量,因此足够大以容纳指针,但是int是一个 32 位量,不足以容纳指针。演员阵容(unsigned long)保留地址的所有位;随后的投射到int丢弃地址的高位 32 位,但默认情况下不会收到警告。

展示:

int main(void)
{
    void *b = (void *)0x12345678;
    int   a = (int)(unsigned long)b;
    int   c = (int)b;
    return a + c;
}

$ gcc -O3 -g -std=c99 -Wall -Wextra -c ar.c
ar.c: In function ‘main’:
ar.c:5:15: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
$

在 Mac OS X 10.8.4 上使用 GCC 4.7.1,默认为 64 位编译。

推测将如何处理“地址的一部分”值是很有趣的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在同一条线上铸造两次 的相关文章

随机推荐

  • Excel 2007:删除单元格中的文本限制

    我想至少输入500 个字符在 Excel 工作表单元格中 但是当我这样做时 它只允许我添加 1 段 例如196 个字符 当我添加另一段时 它会给我一条消息 超出文字限制 我该如何解决这个问题 以便我可以在单元格中添加大量文本 我用谷歌搜索并
  • gcc 中的“假设”子句

    gcc 最新版本 4 8 4 9 是否有类似于以下的 假设 子句 assume 内置icc支持吗 例如 assume n 8 0 从 gcc 4 8 2 开始 gcc 中没有 assume 的等效项 我不知道为什么 这会非常有用 马夫索建议
  • 启动使用 Simperium 的应用程序时 objectFromJSONString 崩溃

    我得到了一个JSON当我尝试启动使用 Simperium 框架的应用程序时崩溃 NSCFString objectFromJSONString unrecognized selector sent to instance 0x6c561a0
  • 基于 ID 的 UiLocalNotifications

    是否有关于根据那里的 Id 存储 UIlocalNotifications 并根据那里的 Id 取消通知的教程 在本地通知中 您有此词典的用户词典 您可以取消通知 http www picksourcecode com ps ct 1612
  • 为什么 OOP 中静态类的最佳实践有所不同?

    我目前正在阅读有关 Java 最佳实践的内容 我发现根据这本书 https rads stackoverflow com amzn click com 0321356683我们必须优先选择静态类而不是非静态类 我记得在 C 最佳实践中 我们
  • 标准 ML 展开列表

    路线 功能expand接收任意类型的列表和整数 数字n 并返回一个列表 其中输入列表的每个项目是 复制的n次 例如 展开 1 2 3 3 必须是 计算结果为 1 1 1 2 2 2 3 3 3 函数的类型必须是 a 列表 int 列表 这是
  • 新的 Android 项目未创建布局或 Java 文件

    这两天我一直在尝试简单地阅读 Big Nerd Ranch Android 编程书 第一章的前几页 我的问题的要点是 当我创建新的 Android 应用程序时 不会创建布局或 java 文件 我已经从 Android 开发站点安装了 ADT
  • 如何使用uWSGI内部路由将HTTP重定向到HTTPS?

    我已经使用 uWSGI 部署了 WSGI 应用程序 但是我没有使用 NGINX https serverfault com a 590833 96915 我该如何使用uWSGI的内部路由 http uwsgi docs readthedoc
  • MacOS High Sierra KEXT 加载 - 有什么方法可以取消用户批准吗?

    正如某些 MacOS 开发人员所知 Apple 实施了安全内核扩展加载 https developer apple com library content technotes tn2459 index html 用户可以通过单击批准第三方
  • 如何使用正则表达式解析 OCC 选项符号?

    OCC 选项符号由 4 部分组成 标的股票或 ETF 的根代码 用空格填充至 6 个字符 到期日期 6 位数字 格式为 yymmdd 期权类型 P 或 C 用于看跌或看涨期权 执行价格 为价格 x 1000 前面填充 0 至 8 位数字 举
  • PHP 内置函数复杂性(isAnagramOfPalindrome 函数)

    我在过去的两个小时里一直在谷歌搜索 但找不到 php 内置函数时间和空间复杂度的列表 我有回文字谜 https stackoverflow com questions 4628386 what is the best algorithm t
  • 修改公共属性的访问修饰符是否是重大更改?

    如果我将公共属性的 setter 的访问修饰符从私有更改为公共 是否会导致引用它的其他程序集发生任何重大更改 UPDATE 这个问题是我 2012 年 1 月博客的主题 https ericlippert com 2012 01 09 ev
  • 如果 @transactional 在类级别应用,如何拦截 @transactional 参数

    我想捕获 transactional 的参数 如果它应用于类级别 例如如果 transactional应用在方法级别 例如 class A transactional readOnly true public void someMethod
  • Zookeeper 未启动,nohup 错误

    我已经下载了zookeeper 3 4 5 tar gz 解压后我将conf zoo cfg写为 tickTime 2000 dataDir var zookeeper clientPort 2181 现在我尝试通过 bin zkServe
  • Windows“findstr”命令:排除包含特定字符串的结果

    到命令findstr str1 我想添加一些内容来排除包含该字符串的结果str2 在Linux中 这样做的方法是添加 grep v str2 to grep str1 当然 是否有一个等效的标志 v在 Windows 中 是否有一个等效的标
  • Spring Data MongoDB 和批量更新

    我正在使用 Spring Data MongoDB 并且想要执行批量更新 就像此处描述的那样 http docs mongodb org manual reference method Bulk find update Bulk find
  • 您最喜欢的 JS/CSS 下拉菜单是什么? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 希望在网站上实现一个 只是好奇其他人都使用过什么以及他们有过什么样的体验 EDIT我也不是一个超级粉丝
  • ZF2 - 从路线生成 URL

    我无法弄清楚在 zend 2 中从我想要的任何地方生成 Url 我得到了动作和控制器 所以我尝试这个 this gt url myControllerName array action gt myActionName 但这返回一个对象 我只
  • mysql中的按位移位

    如何在 MySQL 中进行按位移位 有没有具体的指令或者操作符 如果不是 如何最佳地模拟它 看一下按位运算符MySQL first http dev mysql com doc refman 5 0 en bit functions htm
  • 在同一条线上铸造两次

    我在项目中看到了这段代码 b的类型是void void b int a int unsigned long b 这条线毫无意义吗 我的意思是 这与a int b在所有情况下 这可能会避免 64 位 Unix 系统上的编译器警告unsigne