2011-04-25 34 views
0

我是一個完整的c newb。我試圖定義一個頭文件中的幾個函數,然後在一個單獨的文件中實現它們。當我嘗試運行gcc runtime.c我收到以下錯誤:C頭文件錯誤:期望的標識符或'('之前'['令牌

In file included from runtime.c:1: 
runtime.h:7: error: expected identifier or ‘(’ before ‘[’ token 

這裏的runtime.h的內容:

#ifndef HEADER 
#define HEADER 

/*given two arrays of ints, add them 

*/ 
int[] * _addInts(int[] *x, int[] *y); 

#endif 

有什麼錯誤我試圖瀏覽頭文件,但他們開始增加之類的東西「外部「和」實習生「以及瘋狂的ifdef。感謝您的幫助,Kevin

+0

@Pavan:我想用C寫的,但不會有一個很好的我還有幾天的想法。 – 2011-04-25 00:53:45

回答

3

你應該只傳遞指針(因爲如果你將數組傳遞給一個函數,真正傳遞的是一個指針)。此外,您不能返回數組 - 再次,剛剛返回一個指針:

int* _addInts(int *x, int *y); // equivalent to: int* _addInts(int x[], int y[]); 

您還必須爲元素的數量安排以某種方式被傳遞。像下面爲你可能的工作:

int* _addInts(int *x, int *y, size_t count); 

而且 - 做陷入試圖對陣列參數使用sizeof下的圈套,因爲他們是用C真的指針:

int* _addInts(int x[], int y[]) 
{ 
    // the following will always print the size of a pointer (probably 
    //  4 or 8): 
    printf("sizeof x: %u, sizeof y: %u\n", sizeof(x), sizeof(y)); 
} 

這就是爲什麼我更喜歡將參數聲明爲指針而不是數組的原因之一 - 因爲它們確實是指針。

請參閱Is there a standard function in C that would return the length of an array?宏將返回數組中實際數組元素的數量,並且當您嘗試在指針上使用它時,很多時候會導致編譯器錯誤(在大多數編譯器上)。

如果你的編譯器GCC,你可以使用Linux的絕招:Equivalents to MSVC's _countof in other compilers?

+0

OP不會將數組傳遞給他的函數。他似乎試圖將指針傳遞給數組,這可能不是他想要做的,即使它是,語法也是錯誤的。但是爲了解決問題+1。 – 2011-04-25 00:52:25

+1

我只想補充說,你遇到的問題是你沒有正確地聲明數組。 'int []'不是如何在C中聲明數組。 – mdec 2011-04-25 00:52:31

+0

謝謝!關於大小 - 爲什麼不能在運行時函數中調用sizeof(x)? – 2011-04-25 00:52:54

2

用途:

int* addInts(int* x, int* y, int size); 
3

擺脫每個 「[]」

爲一個數組是一個指針,你只需要通過指針,就像這樣:

int* _addInts(int* x, int* y); 

編輯:亦通的大小。

+0

數組不是指針。在我知道的任何系統上,數組衰減指針,但是sizeof(char [7])!= sizeof(char *)'。 – 2011-04-25 00:55:19

0

你在錯誤的位置有[]。在「C」中聲明數組的語法使得[]在要成爲數組的項之後,而不是在類型聲明和項之間(如Java和C#使用)。我不確定你想要聲明什麼,但這裏有一些選項:

如果你想聲明你將使用一個名爲「_addInts()」的函數返回一個指向int的指針,作爲其參數指針爲整數的兩個獨立的陣列名爲x和y -

int * _addInts(int *x[], int *y[]); 

如果你想聲明的是返回整數數組的指針的函數:

int * _addInts(int *x[], int *y[])[]; 

如果_addInts是一個函數它接受兩個int數組(而不是int *數組):

int * _addInts(int x[], int y[]); 

請注意以下(幾乎)等效,並且可以在您嘗試的聲明中互換使用。

int *x 

int x[] 

的是:

int **x 

int *x[] 
相關問題