gpt4 book ai didi

c - 为什么将 strlen 的输出存储在 int 中时没有发出警告?

转载 作者:太空狗 更新时间:2023-10-29 16:05:38 25 4
gpt4 key购买 nike

strlen返回的类型是size_t,也就是long unsigned int

为什么编译以下代码不会发出有关 slen 签名的警告?

char msg[] = "Hello";
int slen= strlen(msg);

(我预计 long unsigned int slen 是避免此类警告所必需的。)

最佳答案

C 和 C++ 语言允许您在所有不同类型之间复制整数而不会发出警告(默认情况下,编译器可能会向您发出警告,有些会使用 char,这是一个臭名昭著的异常)。

使用 gcc 你可以使用这个警告来避免丢失高位(所以 long longint 会在 32 位上给你一个警告机)。

gcc ... -Wstrict-overflow ...

还有一个标志可以防止自动转换:

gcc ... -Wno-int-conversion ...

这可能会导致很多编译问题,但测试您的代码(lint 类型的东西)可能是个好主意。

查看 gcc 手册将为您提供有关这些警告的其他详细信息。

请注意,您还可以使用 -Werror 标志将警告转换为错误。这样编译就会失败,而不是让您继续处理您认为是错误的事情。

关于c - 为什么将 strlen 的输出存储在 int 中时没有发出警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46719322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com