为什么 gcc 不会对 int 和 char 产生类型不匹配警告?

2024-01-09

为什么在 gcc 中编译以下代码不会产生任何类型不匹配警告?-1属于类型int, and f()期望类型char:

void f(char c) {}
int main(void)
{
  f(-1);
  return 0;
}

即使我们明确指定类型,也不会出现警告:

void f(unsigned char c) {}
int main(void)
{
  f((signed int)-1);
  return 0;
}

奇怪的是:如果我们指定超出范围的值,则会打印警告:

void f(char c) {}
int main(void)
{
  f(65535);
  return 0;
}

warning: overflow in implicit constant conversion

海湾合作委员会版本 6.1.1


An int可以转换为char. In int允许转换为char在 C 和 C++ 中。

来自 C11 标准:

6.3.1.3 有符号和无符号整数

1 当整数类型的值转换为除_Bool,如果该值可以用新类型表示,则它不变。

2 否则,如果新类型是无符号的,则通过在新类型可以表示的最大值上重复加或减 1 来转换该值,直到该值在新类型的范围内。

3 否则,新类型是有符号的,并且值不能在其中表示;结果要么是实现定义的,要么引发实现定义的信号。

来自 C++11 标准:

4.7 积分转换

1 整数类型的纯右值可以转换为另一种整数类型的纯右值。无作用域枚举类型的纯右值可以转换为整数类型的纯右值。

2 如果目标类型是无符号的,则结果值是与源一致的最小无符号整数 整数 ...

3 如果目标类型是带符号的,则如果该值可以用目标类型(和位字段宽度)表示,则该值保持不变;否则,该值是实现定义的。

If char是有符号类型,它可以轻松保存值-1。因此,行为是可以预测的。的积分值c in f将为-1。什么时候unsigned char被使用时,其值c将是一个实现定义的值,但两个标准仍然允许它。

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

为什么 gcc 不会对 int 和 char 产生类型不匹配警告? 的相关文章

  • 在路由mvc 4中添加公司名称

    我一直在尝试为 Facebook 等用户提供在 URL 中添加公司名称的选项 http localhost 50753 MyCompany Login 我尝试过不同的网址 但没有成功 routes MapRoute name Default
  • 在 OnModelCreating 期间设置列名称

    Issue 我目前正在尝试通过设置的属性为我的表及其列添加前缀 我正在使用实体框架核心 我已经正确地为表名添加了前缀 但我似乎无法弄清楚列的前缀 我有一种感觉 我需要使用反射 我已经留下了我的 可能很糟糕的 反思尝试 有人有办法在实体中设置
  • 如何制作可启动程序?

    所以 这个问题可能看起来很奇怪 但假设我编译了 int main void int x 3 int y 4 int z x y 是否可以让CPU这样运行 如何 例如 这允许我写入监视器吗 如果我没记错的话 内存中有些地方可以写入要显示的内容
  • 增强精神、递归和堆栈溢出

    为什么下面的代码在运行时崩溃 它会给出堆栈溢出错误 include
  • MFC:如何设置CEdit框的焦点?

    我正在开发我的第一个简单的 MFC 项目 但我正在努力解决一个问题 想要设置所有的焦点CEdit其中一个对话框中的框 我的想法是 当打开对话框时 焦点位于第一个编辑框上 然后使用 选项卡 在它们之间交换 我看到了方法SetFocus 但我无
  • 将接口转换为其具体实现对象,反之亦然?

    在 C 中 当我有一个接口和几个具体实现时 我可以将接口强制转换为具体类型 还是将具体类型强制转换为接口 这种情况下的规则是什么 Java 和 C 中都允许这两个方向 向下转型需要显式转型 如果对象类型不正确 可能会抛出异常 然而 向上转换
  • UI 函数在快速事件完成之前触发

    我有一个停靠在 Silverlight 应用程序中的 Web 浏览器框架 有时会在其上弹出全窗口 XAML Silverlight UI 元素 我已经或多或少修复了一个老问题 即 Web 框架的内容似乎与 Silverlight 内容不能很
  • C#6 中的长字符串插值行

    我发现 虽然字符串插值在应用于现有代码库的字符串 Format 调用时非常好 但考虑到通常首选的列限制 字符串对于单行来说很快就会变得太长 特别是当被插值的表达式很复杂时 使用格式字符串 您将获得一个可以拆分为多行的变量列表 var str
  • 析构函数中的异步操作

    尝试在类析构函数中运行异步操作失败 这是代码 public class Executor public static void Main var c1 new Class1 c1 DoSomething public class Class
  • 使用具有抗锯齿功能的 C# 更改抗锯齿图像的背景颜色

    我有一个图像需要更改背景颜色 例如 将下面示例图像的背景更改为蓝色 然而 图像是抗锯齿的 所以我不能简单地用不同的颜色替换背景颜色 我尝试过的一种方法是创建第二个图像 仅作为背景 并更改其颜色并将两个图像合并为一个图像 但是这不起作用 因为
  • Project Euler #8,我不明白我哪里出了问题[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在做项目欧拉第八题 https projecteuler net problem 8 其中我得到了这个大得离谱的数字 7316
  • 英文日期差异

    接近重复 如何计算相对时间 https stackoverflow com questions 11 how do i calculate relative time 如何在 C 中计算某人的年龄 https stackoverflow c
  • .NET 4 的条件编译[重复]

    这个问题在这里已经有答案了 可能的重复 条件编译和框架目标 https stackoverflow com questions 2923210 c sharp conditional compilation and framework ta
  • 如何停止无限循环?

    我正在编写一个程序 该程序将计算三角形或正方形的面积 然后提示用户是否希望计算另一个 我的代码已经运行到可以计算任一形状的面积的程度 但随后不再继续执行代码的其余部分 例如 如果选择了正方形 则计算面积 然后返回到正方形边长的提示 我假设这
  • 如何在 winforms 应用程序的主屏幕显示之前显示欢迎屏幕?

    我想在应用程序启动时加载欢迎屏幕 然后用户单击欢迎屏幕上的按钮 然后关闭欢迎屏幕 最后显示主屏幕 static void Main startup method being called Application EnableVisualSt
  • C++ 中 void(*)() 和 void(&)() 之间的区别[重复]

    这个问题在这里已经有答案了 在此示例代码中 func1是类型void int double and funky是类型void int double include
  • 需要提取字符串中点后的最后一个数字,如“7.8.9.1.5.1.100”

    我需要提取 C 字符串中最后一个点后面的最后一个数字 例如 7 8 9 1 5 1 100 并将其存储在整数中 Added 该字符串也可以是 7 8 9 1 5 1 1 或 7 8 9 1 5 1 0 我还想验证它在最后一个点之前恰好是 7
  • 如何得知客户端从服务器的下载速度?

    根据客户的下载速度 我想以低质量或高质量显示视频 任何 Javascript 或 C 解决方案都是可以接受的 Thanks 没有任何办法可以确定 您只能测量向客户端发送数据的速度 如果没有来自客户端的任何类型的输入来表明其获取信息的速度 您
  • 使用 using 声明时,非限定名称查找如何工作?

    根据 C 标准 这是格式错误还是格式良好 namespace M struct i namespace N static int i 1 using M i using N i int main sizeof i Clang 拒绝它 GCC
  • 使用未分配的局部变量

    我遇到了一个错误 尽管声明了变量 failturetext 和 userName 错误仍然出现 谁能帮帮我吗 Use of Unassigned local variable FailureText Use of Unassigned lo

随机推荐

  • 如何在 Django 视图中显示 PDF 文件?

    是否可以显示 PDF 文件inDjango 视图 而不是让用户必须下载它才能看到它 如果可能的话 会怎样做 这就是我到目前为止所拥有的 login required def resume request applicant id Get t
  • 将图像 ID 添加到 dropzone .js 中预览模板中的每个图像

    我只想为使用 dropzone js 上传的每个图像添加图像 ID 目前预览模板是这样的 div class dz preview dz image preview div class dz details div class dz fil
  • Django + AWS S3 Bucket:对 S3 Bucket 进行身份验证访问

    我有一个带有特殊目录的 S3 存储桶 我正在转储用户上传的图像 我希望将这些图像限制为经过身份验证的用户 它不应仅限于上传图像的用户 我真的试图避免为此设置数据库模型 有没有办法阻止匿名会员上传图片 所以 我有两个问题 如何设置匿名用户阻止
  • 返回数字的总和(正数或负数)

    我需要创建一个函数 它接受一个数字并返回其数字之和 如果该数字为负数 则在添加数字时第一个数字应被视为负数 这就是我所拥有的 var arrx var oper var others 0 function sumDigits num you
  • 如何使用 R 中的加权(调查)数据制作漂亮的无边界地理专题/热图,可能对点观测使用空间平滑

    自从约书亚 卡茨发表这些方言地图 http spark rstudio com jkatz SurveyMaps 你可以找到 using 哈佛大学方言调查 http www4 uwm edu FLL linguistics dialect
  • cron 上的屏幕截图显示背景而不是窗口内容

    在 macOS 上 Catalina 在通过 cron 进行屏幕截图时遇到问题 手动运行时do screenshot sh脚本然后一切都很好 但是当它在 cron 问题上自动运行时 只有菜单正确 而不是窗口内容显示 macOS 背景 见图
  • 如何在 Android 中使用 WMS 和 WFS

    我对整个 Geo IT 材料是全新的 我的任务是检查一些在 Android 中查看地图的方法 并覆盖了矢量数据 我有 WMS 和 WFS 服务 可以从中获取数据 但如何将其集成到 Android 中呢 Google Maps Api 不是免
  • window 对象在 Chrome 和 IE 中表现奇怪

    考虑以下 HTML 示例 div div 以及以下脚本 var about function window document use strict var methods methods init function Do things he
  • 如何在 R 中一起绘制两个直方图?

    我正在使用 R 并且有两个数据框 胡萝卜和黄瓜 每个数据框都有一个数字列 列出所有测量的胡萝卜 总计 100k 胡萝卜 和黄瓜 总计 50k 黄瓜 的长度 我希望在同一个图上绘制两个直方图 胡萝卜长度和黄瓜长度 它们重叠 所以我想我还需要一
  • django-tastypie PATCH 给了我一个“400(错误请求)”

    我正在 Apache 上运行一个 Django 站点 该站点以 Nginx 实例为前端 为我的静态媒体提供服务 我通过 django tastypie 将 API 暴露给需要修补字段的模型 当我进行本地测试 通过 django runser
  • 数组衰减为指针的异常?

    我在许多帖子中看到 在大多数情况下 数组名称会退化为指针 我可以知道在什么情况 表达式下数组名称不会衰减为指向其第一个元素的指针吗 Sure 在C99中存在三种基本情况 即 当它是争论的时候 地址 运算符 当它是争论的时候sizeof操作员
  • 如何使用 libphonenumber 以国际格式格式化电话号码。

    In the 文档 https github com googlei18n libphonenumber由Github上的libphonenumber提供 有一个demo https rawgit com googlei18n libpho
  • view.getId() 在 OnItemClickListener 中返回错误的 id

    在我的应用程序中 我有一个包含一些图像的图库 当用户选择图像时 我想以某种方式检索所选图像的 id getId 返回的 int 为 1 为什么我无法获取所选图像的系统 ID gallery setOnItemClickListener ne
  • 使用左连接的 LINQ orderby FK

    我有以下代码 from categories in context SCT Categories join categoryOrders in context SCT CategoryOrders on categories ID equa
  • 如何在 Firefox 中正确渲染@font-face?

    我正在尝试对 Chrome Safari Firefox 和 IE 使用 font face 对于 IE 我什至不知道该怎么做 但对于其他浏览器 我希望 font face 部分能够工作 这是我用过的 font face font fami
  • ruby 从数组中删除一个元素

    我想从数组中按值删除 仅一个 元素 例子 x 1 2 3 2 x remove 2 result x 1 3 但是 我想得到 1 3 2 thanks 正如 7urkm3n在评论中提到的 你可以使用x delete at删除第一个出现的位置
  • Git hooks - 从远程存储库传播?

    我目前正在寻求将现有的 SVN 存储库转换为 git 然后在允许推送之前使用 Reviewboard 进行审核 我最近才开始使用 git 而且远不是这方面的专家 但是我想做的是有一个预推送钩子 它运行 后审查 以将更改提交到 ReviewB
  • 为什么不允许调用main函数?

    C 03 3 6 1 3 不得在程序中使用 main 函数 3 2 我想知道为什么这条规则存在 有人知道如果使用 main 会出现问题的任何系统 实现吗 附 1 我知道这个词的定义used 2 我知道有一些简单的解决方法 例如从 main
  • 找不到提供者 docker - Vagrant

    每当我跑步时vagrant up provider docker 我收到此错误消息 The provider docker could not be found but was requested to back the machine d
  • 为什么 gcc 不会对 int 和 char 产生类型不匹配警告?

    为什么在 gcc 中编译以下代码不会产生任何类型不匹配警告 1属于类型int and f 期望类型char void f char c int main void f 1 return 0 即使我们明确指定类型 也不会出现警告 void f