c - 修复签名和未签名警告之间比较的解决方案

标签 c gcc casting warnings type-conversion

我正在寻找 C 编程语言的解决方案来删除此警告:

Comparison between signed and unsigned warning

我不只是在int类型的变量中将cast转换为unsigned,而是想如下:

#if MAX_NAME >= INT_MAX
  size_t name_size = 0;
#define INT_TYPE size_t
#else
  int name_size = 0;
  #define INT_TYPE int
#endif

然后:

if(.. && name_size++ >= (INT_TYPE)sizeof(name)) {
//..
}

如何解决这个问题?

此外,对宏 INT_TYPE 名称的建议也受到赞赏。

最佳答案

您的示例有缺陷:无论您如何放置,在与 sizeof 的结果进行比较时,您都应该始终使用 size_t 。 IE。没有理由将 name_size 转换为 int

作为一般说明,只需使用该变量的“自然”符号即可。这归结为一个问题:name_size 是否应该为负数?

关于c - 修复签名和未签名警告之间比较的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13768433/

相关文章:

c - C中的二进制补码

c++ - 声明为 __attribute__ ((pure)) 的函数是否允许返回新构造的 std::string

c++ - "dynamically linked at run time but statically aware"- 如何控制加载哪个.so文件?

将32位 float 转换为64位uint64_t

c - 从 WinHttp 获取请求的实际总 header 大小

c - 避免 CUDA 字符串搜索中的分支发散

c - GCC编译时分错误

C# Web API LINQ 实体查询 - 将 AnonymousType 转换为类对象

php - PDO::PARAM_* 与强制转换

c - 如何将.exe程序的功能复制到另一个.exe程序中