我做了下面的代碼非常愚蠢的錯誤:應該不是C++編譯器問題的字面來負數警告轉換
int main(int argc, char *argv[])
{
const int ARR_SIZE = 2147483648;
int* intarr = (int *) malloc(sizeof(int) * ARR_SIZE);
for(int i =0; i < ARR_SIZE; i++) {
intarr[i] = i;
}
}
所以,我真的應該用於ARR_SIZE一個unsigned int。 2147483648當分配給一個帶符號的32位int時確實是最大的負數。 編譯器沒有(或不應該)爲此發出警告是否有充分的理由。當分配大於類型最大值的肯定字面值時,是否需要進行顯式轉換? (對於我真的想要一個負數的情況)
(源語言是C++,當我碰到這個,但我認爲這同樣也是一個C問題)。
這與G ++ 6.1.1,並彙編成這樣:
g++ -Wall -g -o test_so test_so.cpp
int的大小主要取決於平臺。 –
問題是缺少編譯器版本和編譯選項。 –
關於「積極文字」:沒有「消極文字」。 –