GCC函数调用错误

GCC函数调用错误,c,gcc,c-preprocessor,C,Gcc,C Preprocessor,我有以下C代码: #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

我有以下C代码:

#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抱怨说,在调用参数之前,它需要所有类型的令牌。为什么GCC不承认这是一个有效的函数,或者为什么这是无效的

arguments_cleanup(void);
不是调用函数的正确方法,应该是

arguments_cleanup();
编译器试图解释

arguments_cleanup(void);
作为一项声明

不是调用函数的正确方法,应该是

arguments_cleanup();
编译器试图解释

arguments_cleanup(void);

作为声明。

以及如何准确地调用此函数?每当发生错误时,我都会调用它,函数原型的定义方式与此类似。我会使用EXIT()调用它,宏会更改为任何必要的内容(取决于_MODE_DEBUG)以及如何调用此函数,确切地说,我会在发生错误时调用它,函数原型也会以类似的方式定义。我会使用EXIT()调用它,宏会将其更改为任何必要的内容(取决于_MODE_DEBUG),或者它只是将其视为语法错误,事实就是这样(因为C99删除了隐式
int
)。hmmm…所以void应该只在原型中使用?或者它只是将其视为语法错误,事实就是这样(因为C99删除了隐式
int
).hmmm…所以void应该只在原型中使用?