C 中整数表达式的大小

2023-12-23

令我惊讶的是 Xcode 编译 C (gnu11)

#include <stdio.h>
int main(int argc,char**argv)
{
    short s = 1;
    printf( "%zd %zd %zd\n", sizeof(s), sizeof(s*s), sizeof(s?s:s));
    return 0;
}

产生输出

2 4 4

我正期待着

2 2 2

或者可能

2 4 2

为什么是这样?


我记得 K&R 中任何小于 int 的整数表达式都会提升为 int。我发现这个在标准(C89) http://flash-gordon.me.uk/ansi.c.txt:

3.2.1.1 字符和整数

一个 char、一个短 int 或一个 int 位字段,或者它们的带符号或 无符号变量或具有枚举类型的对象可能是 用于表达式中任何可以使用 int 或 unsigned int 的地方。如果 int可以表示原始类型的所有值,其值为 转换为 int;

令人惊讶的是 s?s:s 因为我能找到的所有参考资料都说结果类型是左值,但这只是 C++。 C 将其视为右值。正如预期的那样,C++ 的输出是:

2 4 2

即使表达式是右值。 C 和 C++ 之间的一个意想不到的差异。

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

C 中整数表达式的大小 的相关文章

  • 无法使用已与其底层 RCW 分离的 COM 对象。在 oledb 中

    我收到此错误 但我不知道我做错了什么 下面的代码在backrgroundworker中 将异常详细信息复制到剪贴板 System Runtime InteropServices InvalidComObjectException 未处理 通
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub
  • 如何返回 json 结果并将 unicode 字符转义为 \u1234

    我正在实现一个返回 json 结果的方法 例如 public JsonResult MethodName Guid key var result ApiHelper GetData key Data is stored in db as v
  • 在 ASP.NET Core 3.1 中使用包含“System.Web.HttpContext”的旧项目

    我们有一些用 Net Framework编写的遗留项目 应该由由ASP NET Core3 1编写的API项目使用 问题是这些遗留项目正在使用 System Web HttpContext 您知道它不再存在于 net core 中 现在我们
  • 如何将图像路径保存到Live Tile的WP8本地文件夹

    我正在更新我的 Windows Phone 应用程序以使用新的 WP8 文件存储 API 本地文件夹 而不是 WP7 API 隔离存储文件 旧的工作方法 这是我如何成功地将图像保存到 共享 ShellContent文件夹使用隔离存储文件方法
  • 在数据库中搜索时忽略空文本框

    此代码能够搜索数据并将其加载到DataGridView基于搜索表单文本框中提供的值 如果我将任何文本框留空 则不会有搜索结果 因为 SQL 查询是用 AND 组合的 如何在搜索 从 SQL 查询或 C 代码 时忽略空文本框 private
  • Qt表格小部件,删除行的按钮

    我有一个 QTableWidget 对于所有行 我将一列的 setCellWidget 设置为按钮 我想将此按钮连接到删除该行的函数 我尝试了这段代码 它不起作用 因为如果我只是单击按钮 我不会将当前行设置为按钮的行 ui gt table
  • 当操作繁忙时,表单不执行任何操作(冻结)

    我有一个使用 C 的 WinForms 应用程序 我尝试从文件中读取一些数据并将其插入数据表中 当此操作很忙时 我的表单冻结并且无法移动它 有谁知道我该如何解决这个问题 这可能是因为您在 UI 线程上执行了操作 将文件和数据库操作移至另一个
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 将 unsigned char * (uint8_t *) 转换为 const char *

    我有一个带有 uint8 t 参数的函数 uint8 t ihex decode uint8 t in size t len uint8 t out uint8 t i hn ln for i 0 i lt len i 2 hn in i
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • C++ fmt 库,仅使用格式说明符格式化单个参数

    使用 C fmt 库 并给定一个裸格式说明符 有没有办法使用它来格式化单个参数 example std string str magic format 2f 1 23 current method template
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • 32 位到 64 位内联汇编移植

    我有一段 C 代码 在 GNU Linux 环境下用 g 编译 它加载一个函数指针 它如何执行并不重要 使用一些内联汇编将一些参数推送到堆栈上 然后调用该函数 代码如下 unsigned long stack 1 23 33 43 save
  • 为什么 C# Math.Ceiling 向下舍入?

    我今天过得很艰难 但有些事情不太对劲 在我的 C 代码中 我有这样的内容 Math Ceiling decimal this TotalRecordCount this PageSize Where int TotalRecordCount
  • Process.Start 阻塞

    我正在调用 Process Start 但它会阻止当前线程 pInfo new ProcessStartInfo C Windows notepad exe Start process mProcess new Process mProce
  • 防止索引超出范围错误

    我想编写对某些条件的检查 而不必使用 try catch 并且我想避免出现 Index Out of Range 错误的可能性 if array Element 0 Object Length gt 0 array Element 1 Ob

随机推荐

  • 如何让Service Worker离线工作?

    我无法让我的 Service Worker 离线工作 无论我使用什么教程 我在我的 index html 文件中注册了服务工作者 如下所示
  • 如何在可扩展列表视图上插入标题行

    我有一个带有一个可扩展列表视图的 Android 活动 然后我创建了 ExpandableListAdapter 因此我可以单击一个项目 然后可以看到该项目的子项目 还行吧 现在我想为每个项目的子列表插入标准标题 标题 所以我构建了这段代码
  • “返回的颜色将针对指定上下文的主题进行样式设置”是什么意思?

    我最近注意到一个方法 Context getResources getColor int 自 API 23 起已弃用 应该使用 ContextCompat getColor context R color your color 文档对此说道
  • 如何使用重命名重构作为快速修复的一部分?

    我在 DSL 中添加了一个快速修复选项 我想在其中对文档文本进行一些修改 包括重命名某些元素 我可以很好地更改该元素中的文本 但我还想重命名其所有引用 即重命名重构 我怎么做 我可以以某种方式从快速修复内部触发内置的重命名重构吗 或者 如何
  • Gtk-消息:无法加载模块“canberra-gtk-module”

    我的 pygtk 程序将此警告写入 stderr Gtk Message Failed to load module canberra gtk module 自由堪培拉 http 0pointer de lennart projects l
  • MKMapView 无法缩放地图

    我创建了一个非常基本的应用程序 仅显示 MKMapView 和 UserLocation 我有时在绘制这张底图时遇到问题 它只显示地图的一部分 每当我捏缩放地图时 它都无法重新绘制 而只显示空白的灰色图块 每当需要获取新的地图图块时 控制台
  • OpenCV 不报告准确的帧速率/计数

    我有一个 33 秒的视频 正在尝试使用 OpenCV 进行处理 我的目标是确定每个帧对应的时间实例 相对于视频的开始 我这样做是为了能够比较以不同帧速率录制的同一场景的视频帧 什么在起作用 FPS 正确报告为 59 75 这与什么是一致的f
  • Google Cloud Bigtable 客户端连接池

    我通过制作一个虚拟 Web 应用程序来处理向 Bigtable 写入数据和从 Bigtable 读取数据的请求 对 Google Cloud Bigtable 进行了负载测试 一开始 我只使用单个 Bigtable 连接作为单例 并在所有线
  • Eclipse Web 项目依赖项

    这个问题是关于 Eclipse 开发的 我正在尝试在 Eclipse 中创建一个 Web 应用程序 问题是我没有将依赖项 jar 获取到部署的存档中 我创建了一个新的动态 Web 项目并将其链接到另一个 Java 项目 Java 项目引用了
  • 在 Google App 脚本中共享日历

    我正在尝试从电子表格构建日历 然后与域内的适当人员共享它们 我将其作为附加到电子表格的脚本来执行 到目前为止 我可以读取正确的单元格并构建包含事件的日历 但我遇到的问题是弄清楚如何与正确的人共享特定的日历 我四处搜索并找到了相同的通用代码来
  • 尝试对“$(MSBuildVersion)”进行数字比较,结果为“”而不是数字,条件为“$(MSBuildVersion) >= 16.1.0”)”

    当我尝试重新加载已卸载的项目时 出现此错误 如下图所示 它说这条线来自我的Microsoft Managed Core targets 我尝试更新我的 NuGet 包 我尝试将环境变量路径值更改为 msbuild exe 所在的位置 我尝试
  • 内层div的边距影响外层div

    我有三个嵌套的 DIV 元素 如下所示 div div div This br is br a br multiline br testcase br This br is br a br multiline br testcase br
  • 减少可执行文件大小的过程

    我正在生成一个在 ARM 处理器上运行的十六进制文件 我希望将其保持在 32K 以下 它目前比这个大得多 我想知道是否有人可以提供一些关于缩小它的最佳方法的建议 这是我到目前为止所做的 因此 我对其运行 size 以确定十六进制文件有多大
  • 逗号附近的语法不正确

    这是我尝试从会话中获取多个值时的 ASPX 代码片段 我收到错误 逗号附近的语法不正确 在代码片段中标记了该行 SqlCommand cmd1 new SqlCommand select plugin id from profiles pl
  • 根据 PEP257 自动检查文档字符串样式的工具[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 类似的工具pep8 http pypi python org pypi pep8可以检查源代码样式 但他
  • Kotlin 的构造函数重载

    因为我有一个User类有 2 个参数 first name last name 所以我的 kotlin 类是 data class User val first name String val last name String 现在我想要一
  • 高频调用 std::async 可以吗?

    我写了一个小程序 使用std async对于并行性 它让我崩溃了 我很确定有更好的方法可以做到这一点 但现在我只想知道这里发生了什么 我不会发布确切的代码 因为我认为它不会真正产生影响 它基本上看起来像这样 while 1 std vect
  • 如果文件已存在于 pyspark 中,如何覆盖 rdd saveAsPickleFile(path)?

    如何覆盖 当我们节省时间时 RDD 输出对象任何现有路径 test1 975078 56691 2 000 20171001 926 570 1322 975078 42993 1 690 20171001 926 570 1322 975
  • 询问如何在 R 中使用 ggplot 制作世界热图?

    我想制作特定疾病的世界热图 该数据集包含国家 地区列表 纬度 经度和每个国家 地区的案例 数据可用here https drive google com file d 1 EqMEZFHlujsg40gzEo83dN1zY9d9gAJ vi
  • C 中整数表达式的大小

    令我惊讶的是 Xcode 编译 C gnu11 include