C:如何摆脱转换错误?

bro*_*s94 4 c gcc casting

我有一个使用gcc版本4.6.3的项目,我被迫使用"-Wall -Werror -Wconversion"进行编译.以下简单示例显示了我无法摆脱的错误:

#include <stdint.h>

int main(void) {
  uint32_t u = 0;
  char c = 1;

  u += c;
  return (int)u;
}
Run Code Online (Sandbox Code Playgroud)

用上面的标志编译它给出:

test.c:7:8: error: conversion to ‘uint32_t’ from ‘char’ may change the sign of the result [-Werror=sign-conversion]
Run Code Online (Sandbox Code Playgroud)

好的.只需添加一个类型转换,对吗?不.将第7行更改为u += (uint32_t)c不会使错误消失.即使改变它u = u + (uint32_t)c也不会让它消失.

有可能解决这个问题吗?

请注意,"char"来自字符串,因此我无法更改其类型.

Bas*_*tch 5

问题在于签名(否定)字符.你可以试试

 u += (unsigned) (c&0xff);
Run Code Online (Sandbox Code Playgroud)