//#define static /*empty*/
int main()
{
static int a();
return a();
}
static int a() { return 0; }
如果我刪除(#define static /*empty*/
)的靜態關鍵字,但與靜態 S它與打破這工作得很好:error: static declaration of ‘a’ follows non-static declaration
(GCC)。爲什麼我的本地函數聲明不工作,如果函數是靜態的?
這種行爲的原因是什麼?
您需要在調用它們之前聲明函數。打開'-Wall',你會看到有關「隱式聲明函數'a'」的警告等等。或者把函數的定義放在最上面,或者至少在那裏放置前面的聲明。 – psmears
請勿使用隱藏控制流程更改的宏。這很難維護並且容易出錯。 'return'也不是函數;不要在表達式中使用括號,這可能會影響錯誤/拼寫錯誤。 – Olaf
@PSkocik:啊,沒有看到 - 這真的不是一個好主意!部分原因是人們不會在那裏尋找你的聲明,部分是因爲它不會工作 - 「靜態」在函數內部具有與外部不同的含義...... – psmears