2011-07-21 181 views
1

我有以下的代碼調用該函數uint32_pack。這個程序在Dev-C++中編譯時沒有錯誤,但當'tag'是偶數時不會產生正確的結果。在Visual Studio中,程序編譯但產生錯誤,我猜測這些錯誤是爲什麼當'標記'是偶數時我沒有得到正確的輸出。我仍然試圖讓我的頭在指針附近,我不確定在聲明它們時出錯的位置。謝謝你的幫助。如何初始化指針正確

這裏是代碼,其中的誤差來自:

1 int uint32_pack (uint8_t *fieldnumber, uint32_t value, uint8_t *out); 
2 int main(){ 
3 uint32_t initvalue = 2; 
4 int return_rv; 
5 uint8_t *tag = (uint8_t *) malloc(sizeof(uint8_t)); 
6 *tag = 38; 
7 uint8_t *tempout= (uint8_t *) malloc(30); 
8 return_rv = uint32_pack (tag, initvalue, tempout); 
9 free(tempout); 
10 free(tag); 
11 } 

而且從VS的錯誤,是如下:

error C2143: syntax error : missing ';' before 'type' (on line 7) 
error C2065: 'tempout' : undeclared identifier  (on line 8) 
warning C4047: 'function' : 'unsigned char *' differs in levels of indirection from 'int' (on line 8) 
warning C4024: 'uint32_pack' : different types for formal and actual parameter 3 (on line 8) 
error C2065: 'tempout' : undeclared identifier (on line 9) 
warning C4022: 'free' : pointer mismatch for actual parameter 1 (on line 9) 
+5

看起來你可能會被編譯爲C代碼,因爲MSVC不支持C99它不允許你混合使用聲明和代碼。將它編譯爲C++代碼(重命名爲.cpp或使用IIRC'/ Tp'標誌),看看是否能修復它。如果你需要uint32_pack函數的幫助,你需要在你的問題中包含它。 – user786653

+0

看起來你是對的。你爲什麼不把它發佈爲答案? –

+2

@negeo當你在它的時候 - 爲什麼,哦,爲什麼,你malloc單字節? –

回答

2

最後三個錯誤是第二次的後果,而第二是第一個的結果。這隻會導致第一個和第三個無法解釋的問題。發生

第一錯誤,因爲使用的是C89,而不是C++或C99;你不能在C89代碼之後聲明變量。

反向線6和7的順序,你可能應該OK。 (我覺得第三個錯誤也是第一,也因此,但這並不是最終的。)

1

可能會有幾個不同的問題在這裏。除非你有一個自定義頭部聲明這些整數類型,否則<integer>_t類型在標準頭文件stdint.h中聲明。 Visual Studio不附帶這個頭文件,所以它不知道這些類型是什麼。你可以找到stdint.h的實現,如果你谷歌它。

如果你的文件有.c擴展,Visual Studio將其編譯爲默認爲C文件。另外,它不支持C99語法,所以你不能在可執行代碼中聲明變量。將所有的聲明移動到函數的開頭,或強制VS將文件編譯爲C++。要執行後者,請重命名該文件,或者在文件屬性中有一個允許您這樣做的選項。