我有一個使用gcc版本4.6.3的項目,我不得不使用「-Wall -Werror -Wconversion」進行編譯。下面的簡單示例顯示了一個錯誤,我不能擺脫:C:如何擺脫轉換錯誤?
#include <stdint.h>
int main(void) {
uint32_t u = 0;
char c = 1;
u += c;
return (int)u;
}
上述標誌編譯它給:
test.c:7:8: error: conversion to ‘uint32_t’ from ‘char’ may change the sign of the result [-Werror=sign-conversion]
好,很好。只需添加一個類型轉換,對吧?不。將第7行更改爲u += (uint32_t)c
不會使錯誤消失。即使將其更改爲u = u + (uint32_t)c
也不會使其消失。
可以解決這個問題嗎?
請注意,「字符」來自一個字符串,所以我沒有選擇改變它的類型。
字符是/可以被簽名(即可能有負值),而uint32_t只能有正值。如果你是0而c是-1,你希望得到的結果是什麼? –
它是字符串中的ASCII文本,所以我知道它們不是負值。 – brooks94
@JoachimIsaksson:不保證'char'是否被簽名。它可以是:根據C99 6.2.5p15,它是實現定義的。 – netcoder