在 NULL 表示为 0 的平台上,编译器是否曾经生成过 NULL <= p 的意外代码

2024-04-20

在 C99 中,平等==似乎从来没有未定义过。它可以产生1如果您意外地将其应用到无效地址(例如&x + 1 == &y可能是偶然的事实)。它不会产生未定义的行为。许多(但不是全部)无效地址未定义为根据标准计算/使用,因此p == &x with p悬空指针,或者&x + 2 == &y,无效地址导致未定义的行为,而不是==.

另一方面,>=当应用于不指向同一对象内的指针时,其他比较是未定义的。这包括测试q >= NULL where q是一个有效的指针。这个测试就是我的问题的主题。

我致力于低级嵌入式代码的静态分析器。此类代码执行标准允许之外的操作是正常的。例如,在这种代码中,可以使用以下方式初始化指针数组memset(...,0,...),尽管标准没有明确指出NULL and 0必须具有相同的表示。为了有用,分析器必须接受这种事情并按照程序员期望的方式解释它们。警告程序员将被视为误报。

所以分析器已经假设NULL and 0具有相同的表示(您应该根据分析器检查编译器以确保它们同意这种假设)。我注意到有些程序将有效指针与 NULL 进行比较>= (这个图书馆 http://quicklz.com/是一个例子)。只要这样就可以按预期工作NULL表示为0指针比较被编译为无符号整数比较。 我只希望分析器对此发出警告,如果可能由于某些积极的优化,它可能被编译成与程序员在传统平台上的意思不同的东西。因此我的问题是:有没有程序不评估的例子q >= NULL as 1,在一个平台上NULL表示为0?

注意:这个问题不是关于在指针上下文中使用 0 来获取空指针。关于表示的假设NULL是一个真实的假设,因为没有转换memset()例子。


肯定有一些指针,当您将它们重新解释为指针大小的有符号整数时,它们将带有负号。

特别是 Win32 上的所有内核内存,如果您使用“大地址感知”,那么甚至 1GB 的用户空间,因为您将获得 3GB 的用户空间。

我不知道 c 指针算术的细节,但我怀疑这些在某些编译器中可能会比较为

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

在 NULL 表示为 0 的平台上,编译器是否曾经生成过 NULL <= p 的意外代码 的相关文章

  • boost::asio + std::future - 关闭套接字后访问冲突

    我正在编写一个简单的 TCP 客户端来发送和接收单行文本 异步操作由 std future 处理 以便于超时阻塞查询 不幸的是 我的测试应用程序在破坏服务器对象时因访问冲突而崩溃 这是我的代码 TCP客户端 hpp ifndef TCPCL
  • c和java语言中的换行符

    现在行分隔符取决于系统 但在 C 程序中我使用 n 作为行分隔符 无论我在 Windows 还是 Linux 中运行它都可以正常工作 为什么 在java中 我们必须使用 n 因为它与系统相关 那么为什么我们在c中使用 n 作为新行 而不管我
  • 在 C# 中创建具有单独列的分隔文本

    我一直在尝试在 C 中创建一个制表符限制的文本文件 以便数据正确显示在单独的列中 Firstname Lastname Age John Smith 17 James Sawyer 31 我尝试过 t 字符 但我得到的只是 Firstnam
  • 如何使用MemoryCache代替Timer来触发一个方法?

    以下方法通过等待已运行操作的结果来处理并发请求 对数据的请求可能会使用相同 不同的凭据同时出现 对于每组唯一的凭据 最多可以有一个GetCurrentInternal呼叫正在进行中 当准备就绪时 该呼叫的结果将返回给所有排队的服务员 pri
  • std::cout 和 std::wcout 有什么区别?

    在c 中 有什么区别std cout and std wcout 它们都控制流缓冲区的输出或将内容打印到控制台 或者它们只是相似吗 它们作用于不同的字符类型 std cout uses char作为字符类型 std wcout uses w
  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • 如何将 #ifdef DEBUG 添加到 Xcode?

    我的项目中有一些代码永远不应该在发布版本中使用 但在测试时很有用 我想做这样的事情 ifdef DEBUG Run my debugging only code endif 在 Xcode 4 中哪里添加 DEBUG 设置 我尝试将其放入
  • 如何修复此错误“GDI+ 中发生一般错误”?

    从默认名称打开图像并以默认名称保存 覆盖它 我需要从 Image Default jpg 制作图形 将其放在 picturebox1 image 上并在 picurebox1 上绘制一些图形 它有效 这不是我的问题 但我无法保存 pictu
  • 在 Unity 进程和另一个 C# 进程之间进行本地 IPC 的最快方法 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我希望每秒大约 30 次从 C 应用程序向我的 Unity 应用程序传送大量数据 由于 Unity 不支持映射内存和管道 我考虑了 t
  • 读取文件特定行号的有效方法。 (奖励:Python 手册印刷错误)

    我有一个 100 GB 的文本文件 它是来自数据库的 BCP 转储 当我尝试导入它时BULK INSERT 我在第 219506324 行上收到一个神秘错误 在解决此问题之前 我想看看这一行 但可惜的是我最喜欢的方法 import line
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • 将 Excel 导入到 Datagridview

    我使用此代码打开 Excel 文件并将其保存在 DataGridView 中 string name Items string constr Provider Microsoft Jet OLEDB 4 0 Data Source Dial
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • 将 log4net 与 Autofac 结合使用

    我正在尝试将 log4net 与 Autofac 一起使用 我粘贴了这段代码http autofac readthedocs org en latest examples log4net html http autofac readthed
  • 如何编写一个同时需要请求和响应Dtos的ServiceStack插件

    我需要提供本地化数据服务 所有本地化的响应 Dto 都共享相同的属性 IE 我定义了一个接口 ILocalizedDto 来标记那些 Dto 在请求端 有一个ILocalizedRequest对于需要本地化的请求 Using IPlugin
  • 如何从main方法调用业务对象类?

    我已将代码分为业务对象 访问层 如下所示 void Main Business object public class ExpenseBO public void MakeExpense ExpensePayload payload var
  • 如何对 Web Api 操作进行后调用?

    我创建了一个 Web API 操作 如下所示 HttpPost public void Load string siteName string providerName UserDetails userDetails implementat
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • 当另一个线程可能设置共享布尔标志(最多一次)时,是否可以读取共享布尔标志而不锁定它?

    我希望我的线程能够更优雅地关闭 因此我尝试实现一个简单的信号机制 我不认为我想要一个完全事件驱动的线程 所以我有一个工作人员有一种方法可以使用关键部分优雅地停止它Monitor 相当于C lock我相信 绘图线程 h class Drawi

随机推荐

  • 修复地图投影后形状不连续的多边形对象

    该演示程序 旨在在 IPython 笔记本中运行 您需要matplotlib mpl toolkits basemap pyproj and shapely 应该在地球表面绘制越来越大的圆圈 只要圆不越过其中一根极点 它就能正常工作 如果发
  • 如何使用类初始化 STL 向量/列表而不调用复制构造函数

    我有一个 C 程序 它使用包含类实例的 std list 如果我打电话 例如myList push back MyClass variable 它经历创建临时变量的过程 然后立即将其复制到向量 然后删除临时变量 这远没有我想要的那么高效 而
  • css关键帧动画动态高度

    您好 我的子菜单有以下 css 它用于在页面加载时打开它们 它效果很好 但是我注意到 如果在我设置的动画的结束状态height auto 那么动画不会被执行 这对我来说是一个问题 因为在我的网站中我有许多子菜单 其中有 n 个子菜单 所以我
  • Sqlite 与 Blazor Wasm (.NET 6) -> System.DllNotFoundException: e_sqlite3

    根据 NET 6 中的新 Blazor WebAssembly 功能 NET 6 中的新 Blazor WebAssembly 功能 Sqlite 与 Blazor Wasm NET 6 gt System DllNotFoundExcep
  • jQuery 通过单击链接来排列 li 顺序

    需要通过点击向上移动或向下移动来改变li位置 div ul li Item1 a class moveUp Move Up a a class moveDown Move Down a li li Item2 a class moveUp
  • 有人可以解释 Blazor 组件标签的各种语法吗

    在我的 razor 文件中 我有这些标签 只是一个示例 它们有效 但我无法向自己解释各种语法背后的原因
  • 来自 Microsoft Graph 的多个更改通知

    每当更新 创建 删除或编辑 事件时 我都尝试从 Microsoft Graph 接收更改通知 我已成功创建订阅 接收通知的 URL 属于 Azure Function 但是 每当我创建或删除事件时 图表都会针对一个特定更改发送多个通知 正如
  • Cocoa 结构体和 NSMutableArray

    我有一个 NSMutableArray 我正在尝试存储和访问一些结构 我该怎么做呢 addObject 给我一个错误 说 addObject 的参数 1 的类型不兼容 这是一个示例 in 是 NSFileHandle array 是 NSM
  • 在 Windows 8/10 上调用静态链接函数每次都会崩溃,但在 Windows 7 上则不然

    问题 我已经建立了https github com reorg pg repack https github com reorg pg repack生成二进制文件的项目 该二进制文件与 postgres 9 6 可再发行组件链接 我使用由
  • 使用 @EmbeddedKafka 时执行 @DirtiesConfig 的正确方法是什么

    我们的项目中有一个 小 问题 无法建立与节点 0 的连接 代理可能不可用 测试运行非常非常长的时间 并且该消息每秒至少记录一次 但我发现 如何摆脱它 请继续阅读 如果配置 注释有不正确的地方 请告诉我 版本优先
  • EXC_BAD_ACCESS 使用 gmaps sdk 1.9.0,Xcode 6.4,在 8.3 设备上运行

    我有 2 个使用 google 地图 sdk 的项目 它们目前位于 Appstore 中 需要注意的事项 通过cocoapods安装的Gmaps sdk版本1 9 0 Xcode 版本 6 4 部署目标 7 1 设备 iPhone 4s 8
  • 将变量从中间件传递到模板

    我是 Django 初学者 到目前为止我学到了传递变量view to template 但现在我需要将变量传递到我的主布局 我可以在视图中的每个页面的定义中传递它 但它的重复太多了 于是我开始学习中间件 我创建了 middlewares p
  • VBA 打开多个工作簿、复制特定数据、删除重复行并将信息粘贴到新工作簿中

    我知道标题不太清楚 但我希望我能在这个描述中更好地解释它 我是 VBA 新手 我需要编写一些执行以下操作的代码 打开特定文件夹中的多个工作簿 并将信息从源工作表 仅一个活动工作表 中间的表复制到新工作簿中的目标 Sheet1 问题 1 表的
  • 有没有办法让 xsd.exe 生成具有“内部”范围的类?

    我有一个 DLL 其中包含一些 XSD 生成的类 不幸的是 XSD exe 将这些类公开 这会导致 缺少公开可见类型或成员 XYZ 的 XML 注释 警告 另外 我不想从我的 DLL 中公开这些类 有没有办法 除了手动编辑生成的 cs 之外
  • 如何通过T-SQL在SQL Server 2008中创建计划作业?

    我想创建一个作业 在一段时间过去后从数据库中删除记录 例如我在新闻表中有一个字段Time Stamp每个月都会有一个 SQL 查询像计划作业一样针对我的数据库运行 并删除时间戳为两个月前的新闻 一般来说 我想删除两个月前或更早的新闻 以免我
  • 克隆与实例化新类

    在这种情况下 克隆是好的做法吗 怎样才能做得更好呢 public ModelCollection startParsing return parseFeed new ModelSpecialEntry public ModelCollect
  • 数据库模式混乱

    当我设计一些类时 我遇到了轻微的术语混乱 在 Sql Server 2005 中 架构 指的是数据库对象的命名空间和组织系统 但对于一般的关系数据库来说 模式 意味着表 字段等的 DDL 设计 如果我的观点是正确的 那么它解释了当我尝试阅读
  • 哪个STL容器?

    我需要一个容器 不一定是 STL 容器 它可以让我轻松执行以下操作 在任意位置插入和移除元素 通过索引访问元素 以任意顺序迭代元素 I used 标准 列表 但它不会让我在任何位置插入 确实如此 但为此我必须迭代所有元素 然后在我想要的位置
  • 将日期从 MySQL 正确导入到 R 中

    我的问题几乎相同正如这个 https stackoverflow com questions 27597932 databse connection using dplyr with date field in databse 简而言之 我
  • 在 NULL 表示为 0 的平台上,编译器是否曾经生成过 NULL <= p 的意外代码

    在 C99 中 平等 似乎从来没有未定义过 它可以产生1如果您意外地将其应用到无效地址 例如 x 1 y可能是偶然的事实 它不会产生未定义的行为 许多 但不是全部 无效地址未定义为根据标准计算 使用 因此p x with p悬空指针 或者