C语言 为什么在 int 中存储 strlen 的输出时不发出警告



返回的类型strlensize_t,即long unsigned int

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

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

(我预计有必要long unsigned int slen以避免这样的警告。

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

使用 gcc您可以使用此警告来避免丢失高位(因此long long to int 会在 32 位计算机上发出警告)。

gcc ... -Wstrict-overflow ...

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

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新