这有什么样的功能?

Shi*_*lCh 3 c function construct

我正在阅读"C编译器设计"一书.在基础部分,我发现lexer的ac片段是这样的 -

static int Lookahead = -1;
int match(token)
int token;
{
 if(Lookahead == -1)
    Lookahead = lex();

 return token == Lookahead;
}

void advance(){
   Lookahead = lex();
}
Run Code Online (Sandbox Code Playgroud)

我对如何在gnu gcc上编译匹配函数感到困惑.所以我写了一个看起来像的函数

int a(token)
int token;
{
 printf("Value of token is %d", token);
}
int main()
{
 printf("Hello world!\n");
 a(1);
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到以下输出 -

你好,世界!令牌的值为1

但我没有得到功能声明背后的原因.以这种方式声明功能有什么好处?而令牌的价值如何为1?为什么它不是编译错误?它是C中的某种函数声明吗?

谢谢你查看我的问题.任何形式的帮助都会很棒.

hac*_*cks 6

它是旧的,不赞成使用的K&R风格的功能声明.

int match(token)
int token;
{
    // Function body
}  
Run Code Online (Sandbox Code Playgroud)

相当于

int match(int token)
{
    // Function body
}    
Run Code Online (Sandbox Code Playgroud)

除了在前者中,编译器不会检查函数是否使用正确数量的参数调用,也不会检查参数的类型.它依赖于默认参数促销.
C89和C99也支持这种风格.