2014-10-30 31 views
0

當我編譯我的Arduino的草圖(C語言),我得到的錯誤:編譯器錯誤:在C代碼「‘E’是不是在這個範圍內聲明」

sketch_oct30b:2: error: ‘e’ was not declared in this scope 
sketch_oct30b:2: error: ‘z’ was not declared in this scope 

這是一段代碼, char z位於整個代碼的第一行。

char z[4] = "z_0"; 
int e = 0; 

char delta(e, z) {} 

從我發現了這個錯誤意味着程序員忘記了一些聲明,但我實在不明白,我忘了申報ez。 有人可以告訴我我忘了在哪裏申報嗎?

+0

如果這些是全局變量,可以在函數參數中刪除'e'和'z'。 – ooga 2014-10-30 18:55:20

+0

@ooga爲什麼?函數是否需要知道它應該工作的參數? – Merlin 2014-10-30 21:59:44

+0

如果變量是「全局」的,那麼它們在所有函數中都是可見的,不僅*不需要被聲明爲函數參數,而且實際上*不能(具有相同的名稱)參數變量會「隱藏」全局變量,並且它們將不可訪問。儘管如此,全局變量通常是一個壞主意,所以你可能想看看下面的答案。 – ooga 2014-10-30 22:34:51

回答

1

錯誤意味着這個函數定義

char delta(e, z) {} 

名E和Z都沒有聲明,

要麼你必須指定一個參數列表,例如

char delta(int e, char z[]) {} 

或標識列表

char delta(e, z) int e; char * z; {} 
+0

所以,我必須再次聲明變量,好吧。但是,這讓我想知道爲什麼我得到第2行的錯誤,而不是4? – Merlin 2014-10-30 22:02:48

+0

@Merlin你應該顯示實際的代碼。您顯示的代碼與errpr消息不符。 – 2014-10-31 03:47:49

+0

我已經修復了這個錯誤,所以我沒有舊的代碼了,但是整個代碼都是以char z [4] =「z_0」開始的(這只是一個函數)。這就是爲什麼我對第2行中的錯誤感到困惑。 – Merlin 2014-10-31 14:46:11

1

如果char delta(e, z) {}應該是一個函數定義,您必須記住正確的語法。

char delta(int e, char *z) 
{ 
    char result; 

    /* do whatever here... */ 

    return result; 
} 

char z[4] = "z_0"; 
int e = 0; 

char result = delta(e, z); 
相關問題