从“int”转换为“size_t”可能会改变结果的符号 - GCC,C

2023-11-24

在我的项目中,我打开了将警告视为错误并使用-pedantic and -ansi标签。我正在使用 GCC 编译器。在这个项目中,我必须使用第三方源代码,该源代码有很多警告。由于我将警告视为错误,因此我在修复他们的代码时遇到了困难。

大多数警告都是关于无效转换int to size_t或相反亦然。在某些情况下,我无法使两个变量的类型相同,我的意思是我无法将某些内容更改为size_t。在这种情况下,我会进行显式转换。就像是,

size_t a = (size_t) atoi(val);

我想知道这是正确的方法吗?这样的cast有什么问题吗?

如果这些警告很轻微,我可以只在他们的文件上禁止它吗?如何在 MSVC 上执行相同操作?


Edit:

如果您想以可移植的方式关闭每个实例的编译器,则强制转换是唯一的方法。只要您知道自己在做什么就可以了,例如你可以确保结果atoi永远不会是负数。

在 GCC 中,您可以使用以下命令关闭所有符号转换警告-Wno-sign-conversion旗帜。还有-Wno-sign-compare(对于像这样的东西2u > 1)但除非您使用,否则它不会相关-Wextra.

您还可以使用诊断语用 like

#pragma GCC diagnostic ignored "-Wsign-conversion"

在 MSVC 中,有几个与有符号/无符号不匹配相关的警告,例如:

  • Level 4:
    • C4389, C4245, C4365
  • Level 3:
    • C4018 (2u > 1)
  • Level 2:
    • C4267 (size_tint)

要禁用 MSVC 中的警告,您可以添加#pragma warning e.g.

#pragma warning (disable : 4267)

或添加一个/wd4267编译器选项中的标志。


也许你应该使用strtoul代替atoi.

size_t a = strtoul(val, NULL, 0);

(没有任何警告only if size_tunsigned long。在大多数平台上,这是正确的,但不能保证。)

优点是您可以使用此函数执行错误检查,例如

#include <stdlib.h>
#include <stdio.h>

int main () {
    char val[256];
    fgets(val, 256, stdin);
    char* endptr;
    size_t a = strtoul(val, &endptr, 0);
    if (val == endptr) {
        printf("Not a number\n");
    } else {
        printf("The value is %zu\n", a);
    }
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从“int”转换为“size_t”可能会改变结果的符号 - GCC,C 的相关文章

  • C++ 编译器可以对结构中的元素重新排序吗

    C 编译器 特别是 g 可以对结构体的内部元素重新排序吗 我看到一些奇怪的行为 其中我有一个包含如下内容的结构 Struct SomeStruct long someLong long someLongArray 25 unsigned l
  • Web API 复杂参数属性均为 null

    我有一个 Web API 服务调用可以更新用户的首选项 不幸的是 当我从 jQuery ajax 调用中调用此 POST 方法时 请求参数对象的属性始终为 null 或默认值 而不是传入的值 如果我使用 REST 客户端调用相同的方法 我使
  • 如何在 C++ 中的嵌套词法作用域可访问的作用域中声明静态信息?

    我想声明范围的标识符 该标识符将用于自动填充最内部范围内任何日志记录语句的字段 它们通常会 但并非总是如此 例如 lambda 使用 引入的块 匹配封闭块的 名称 用法看起来像这样 namespace app LOG CONTEXT app
  • 在 std::forward 中它如何接受右值?

    看看斯科特 迈耶的有效的现代 C 第200 201页 建议的简化实施std forward可能是 在其他地方看到了正确的实现 template
  • 有了private修饰符,为什么可以直接访问其他对象中的成员呢?

    我有以下代码 class A private int x public A x 90 A A a1 A a2 a1 x 10 a2 x 20 int getX return this gt x 我知道代码可能很奇怪 但我不明白为什么a1 a
  • 本机 C++ 通过代理 C++ 托管 dll 使用 C# dll

    这相当复杂 所以请耐心听我说 我有一个用本机 仅限 Win32 C 编码的第 3 方程序 目标 作为目标设计的一部分 它实现了一个 dll 插件系统 本机 DLL 当放置在程序的 ext 目录中时 由目标加载 然后 目标根据需要调用每个 D
  • flowlayoutpanel和水平滚动条问题

    我正在使用一个 flowlayoutpanel 它有很多逻辑上的按钮 我遇到的问题是 当我调整窗口大小时 当窗口变小时 我无法看到所有水平排列的按钮 相反 当窗口变小时 按钮会下降到下一行 谁能帮我解决这个问题 我只是希望按钮水平排列 当窗
  • WPF 中可选择的 TextBlock 或带有格式化文本的 TextBox

    我遇到一种情况 我需要显示格式化文本 正常 粗体 突出显示 并且还应该是可选择的 以便用户可以复制文本 我使用了文本块 我可以使用内联内容流元素应用多种格式 但不幸的是它的文本不可选择 虽然文本框允许选择文本并复制到剪贴板 但它不允许我设置
  • 在 .NET Core 上通过 MEF 将参数传递给插件构造函数?

    我花了几个小时试图弄清楚如何通过 MEF System Composition 将参数传递给插件构造函数 但一切都无济于事 不用说 相关文档很少 查看源代码也没有帮助 这曾经非常容易做到 使用 CompositionHost Compose
  • 将私有部分保留在 C++ 标头之外:纯虚拟基类与 pimpl

    我最近从 Java 和 Ruby 切换回 C 令我惊讶的是 当我更改私有方法的方法签名时 我必须重新编译使用公共接口的文件 因为私有部分也位于 h 文件中 我很快想出了一个解决方案 我想这对于 Java 程序员来说是典型的 接口 纯虚拟基类
  • 使用 openssl 库获取 x509 证书哈希

    我目前正在开发一个应用程序 它使用 openssl 库 libcrypto 来生成证书 现在我必须获取现有证书的哈希值 当我使用终端时 我可以使用以下命令生成哈希值 openssl x509 hash in cert pem noout 输
  • 给出对象的指针作为参数

    假设我有 void func foo obj 我有 foo object 我该如何制作object进入争论func 只需取消引用它即可 func object
  • 有没有办法对 RichTextBox 的撤消历史进行分组或暂时禁用它?

    我目前正在研究 WPF 中 RichTextBox 内的表格 在 WPF 中 表格没有行和列 只有行 每行都有一定数量的单元格 当用户按下 添加列 按钮时 我的程序会向每一行添加一个新单元格 使用此方法的问题是 在用户添加一列后 如果他们按
  • 创建 PING 程序时限制 ICMP 回显答复

    我正在编写一个多线程 ping 程序 我在每个线程 针对每个 IP 上创建了原始套接字 并使用 sendto 向每个线程发送了 ICMP Echo 请求 然后在每个线程中执行了 receivevfrom 我正在从各种套接字中的 IP 获取消
  • 我使用 tm/mktime 是否错误,如果没有,有解决方法吗?

    我认为下面的程序应该输出从公元 1 年到 1970 年每年第一天到 1970 年的秒数 前面是time t在编译它的系统上 CHAR BIT是一个宏 所以我认为你不能只是复制编译后的可执行文件并假设它是正确的 尽管实际上一切都使用 8 位c
  • BlueZ D-Bus C,应用 BLE

    我正在尝试编写一个应用程序来搜索附近的蓝牙设备并与它们通信 我的应用程序将用 C 语言编写 并打算在 Linux 下工作 是否有通过 C 中的 D Bus 使用 BlueZ 的教程或示例 此应用程序的目的是从 BLE 中的文件发送数据 你能
  • 隐式类型转换 - 编译器错误

    这个问题与this https stackoverflow com questions 3529449 can i make the ternary operator treat my class like a bool问题 下面的代码在V
  • 如何设置扬声器声音增强设置

    如何以编程方式设置 Windows 扬声器设置 增强 选项卡 中可用的声音效果 恐怕这是不可能的 参见 Maurits 对他的评论blog http blogs msdn com b matthew van eerde archive 20
  • 以编程方式连接和断开 USB,“无需拔出和重新插入”

    我需要以编程方式连接和断开 USB 也就是说 我已经插入了USB设备 我需要使用 C NET 应用程序传输文件 该应用程序将监视特定文件夹并将文件从该文件夹传输到 USB 驱动器 我需要在文件传输后断开 USB 设备的连接 并在需要时连接
  • 将 Web 场迁移到 ASP.NET 运行时版本 4,同时保持会话

    我们已将 Web 应用程序从 net 运行时 2 v 3 5 迁移到 net 运行时 4 v 4 5 我有一个部署问题 我们的 sessionstate 服务器是一个 stateserver 并在单独的服务器上运行框架 2 中的 aspne

随机推荐

  • 如何改进印地语文本提取?

    我正在尝试从 PDF 中提取印地语文本 我尝试了所有从 PDF 中提取内容的方法 但都不起作用 有解释为什么它不起作用 但没有答案 所以 我决定将PDF转换为图像 然后使用pytesseract提取文本 我已经下载了印地语训练数据 但这也给
  • MySQL 类型=MyISAM 错误

    本月早些时候 我正在开发我的论坛网站 遇到了一个小问题 不幸的是 除了我的数据库之外 一切都很顺利 我在里面做了一张桌子 叫做users用这个脚本 CREATE TABLE users id int 4 NOT NULL auto incr
  • 如何在文本文件中搜索字符串?

    我想检查字符串是否在文本文件中 如果是 则执行 X 如果不是 则执行 Y 但是 此代码始终返回True因为某些原因 任何人都可以看到出了什么问题吗 def check datafile file example txt found Fals
  • 将线程本地内存刷新到全局内存意味着什么?

    我知道Java中易失性变量的目的是对此类变量的写入对其他线程立即可见 我还知道同步块的作用之一是将线程局部内存刷新到全局内存 我从未完全理解在这种情况下对 线程本地 内存的引用 我知道仅存在于堆栈上的数据是线程本地的 但是当谈论堆上的对象时
  • CSS 网格包裹

    是否可以在不使用媒体查询的情况下制作 CSS 网格换行 就我而言 我想要将不确定数量的项目放置在网格中 并且希望该网格进行换行 使用 Flexbox 我无法可靠地很好地间隔事物 我也想避免一堆媒体查询 Here s 一些示例代码 grid
  • 使用 ITextRenderer 从包含非拉丁字符的 HTML 生成 PDF 不起作用

    这是我调查的第二天 没有任何结果 至少现在 我可以问一些非常具体的问题 我正在尝试编写一个有效的 HTML 代码 其中包含 PDF 文件中的一些非拉丁字符iText更具体地使用文本渲染器 from 飞碟 我的简短示例 代码首先使用以下值初始
  • 为什么多个 javascript 库将 $ 用于一种或另一种用途

    我见过几个使用 的 javascript 库 无论是 jQuery mootools prototype 等 甚至一些关于 javascript 的书籍也建议使用 作为 document getElementById 的函数替换 这只是随机
  • Python 请求发布文件

    使用 CURL 我可以发布一个文件 例如 CURL X POST d pxeconfig cat boot txt https ip 8443 tftp syslinux 我的文件看起来像 cat boot txt line 1 line
  • 如何在 iOS 6 中为文本添加下划线?

    我正在尝试在标签中的某些文本下划线 但是 我不知道如何获取标签中整个文本的范围 这是我到目前为止所拥有的 NSMutableAttributedString mat self tableLabel attributedText mutabl
  • 哪个 C# 定时器?

    我正在编写一个包含计时器的类 最重要的是 它可能不会在 0 处初始化 它可能已经开始计时 并且该类将包含 Start Pause Resume 和 Stop Complete 方法 我知道我可以使用 C 中的许多计时器 即 System T
  • Mac OS 10.5 上的 Java 1.6 SDK

    适用于 Mac 的 Java 1 6 SDK 已发布吗 我好像找不到 是的 但仅适用于基于 Intel 的 64 位 Mac 即使用 Core 2 双核或单核 或 Xeon 芯片的 Mac 不支持原装Core芯片 也不支持任何PPC芯片 此
  • C# 应用程序退出时会自动释放托管资源吗?

    我完全知道 using 语句是处理的方式IDisposables 请不要在评论中重复此建议 当 C NET 4 5 或更高版本 应用程序关闭时 会发生什么IDisposable哪些没有得到妥善处置 我知道有些有一个用于处理非托管资源的终结器
  • 如何使用 Webkit 在 Ubuntu 11.04 (Natty Narwhal) 上运行 Eclipse SWT 浏览器组件?

    我在 Eclipse RCP 应用程序中使用 SWT 浏览器控件 在 Linux Ubuntu 10 10 上 这取决于安装 xulrunner 1 9 2 的用户 这很好用 然而 在 Ubuntu 11 04 上 我发现它默认随 xulr
  • 如何在两个不同的 Android 应用程序之间共享 SharedPreferences 文件?

    我已经为此苦苦挣扎了一段时间 基本上 我想让两个应用程序 总是安装在一起 共享首选项 其中一个只是在后台运行并需要使用首选项的服务 应该拥有首选项 但只really需要读取它们 另一个应用程序是前端 UI 应用程序 需要能够写入另一个应用程
  • 拖放图像输入文件并在上传前预览[重复]

    这个问题在这里已经有答案了 我想创建一个 div 附加拖放功能 当有人单击它时 他们可以选择他们的图像 我已经编码了一些东西并且它可以 单击 div 并选择您的图像 上传前预览图像 你可以检查我的小提琴 css uploader width
  • Ajax(这个)不工作

    当尝试访问 container 的 box 类时 在 ajax 调用内部使用 this 不起作用 container on click box function event var description if this 0 style w
  • NumPy 索引:使用布尔数组进行广播

    相关这个问题 我通过布尔数组和广播遇到了索引行为 我不明白 我们知道可以使用整数索引和广播对二维 NumPy 数组进行索引 这是在docs a np array 0 1 2 3 4 5 6 7 8 9 10 11 b1 np array F
  • 打字稿 |不可变 |扩展 Immutable.Map 类型的正确方法

    我有一个用打字稿编写的带有不可变包的react redux应用程序 我有一个来自 api 的数据 在存储中我将其打包到 Map 中 在所有应用程序中 它们都用作地图 我创建了一个界面 export interface PaymentMeth
  • iOS:让应用程序像服务一样运行

    在 iOS 中 我如何指示操作系统让我的应用程序保持运行 即使它不再位于前台 Skype Viber Empatica Zenly 还有更多的应用程序可以做到这一点 基本上 iOS 中不存在服务类型应用程序或功能之类的东西 即使是 后台 应
  • 从“int”转换为“size_t”可能会改变结果的符号 - GCC,C

    在我的项目中 我打开了将警告视为错误并使用 pedantic and ansi标签 我正在使用 GCC 编译器 在这个项目中 我必须使用第三方源代码 该源代码有很多警告 由于我将警告视为错误 因此我在修复他们的代码时遇到了困难 大多数警告都