2013-01-16 71 views
0

我有以下Ç代碼:GCC函數調用錯誤

#ifdef _MODE_DEBUG 
void program_exit(void){ 
#else 
void program_exit(const unsigned char* fileName, unsigned int lineNumber){ 
    printf("The program was called to terminate early from file \"%s\" line %u", fileName, lineNumber); 
#endif 
//We have to call cleanup() wherever possible. 
arguments_cleanup(void); 

exit(1); 
} 

哪些應該動態地提供代碼的預編譯的版本只有一個功能,這取決於_MODE_DEBUG是否定義或沒有。但是,GCC在調用arguments_cleanup之前會抱怨它期待各種標記。爲什麼GCC不認爲這是一個有效的功能,或爲什麼這是無效的?

+0

而你如何調用這個函數呢? – StoryTeller

+0

每當發生錯誤時我都會調用它,函數原型是以類似的方式定義的。我會使用EXIT()來調用它,其中一個宏改變爲任何必需的(取決於_MODE_DEBUG) –

回答

5
arguments_cleanup(void); 

不是調用函數的正確方法,它應該是

arguments_cleanup(); 

編譯器試圖解釋

arguments_cleanup(void); 

的聲明。

+0

或者它只是將它視爲語法錯誤,它是(因爲C99掉了隱式'int')。 –

+0

嗯...所以虛空只應該在原型中使用? –

+0

@MaxSnijders正確。 – Nocturno