2016-02-19 71 views
3

为什么这个Code在整个声明的中间无处(中间函数定义),不抛出错误?为什么在其函数定义之外声明的函数变量不会引发错误?

1)为什么它在语法上是正确的。
2)这样做有什么用处?


#include <stdio.h> 
void func(int, int); 
int main() 
{ 
    int a, b; 
    a = 10; 
    b = 20; 
    func(a, b); 

    return 0; 
} 
void func(i, j) 
int i,j;     //why does this doesn't throw error. 
{ 
    printf("a = i = %d\nb = j = %d\n", i, j); 
} 
+0

正如以下回答,它在语法上是正确的,因为它是有效的 - 这是事情完成的原始方式。现在没有任何使用这种语法的方法,除非你碰巧使用了不支持ANSI C的K&R风格的编译器。 – mah

+0

而不是** EVER **为K&R风格定义的函数提供原型。为了找出原因,在函数原型和定义中将'int'更改为'char'。 –

回答

3

TL; DR - K &ř风格。

在你的代码

void func(i, j) 
int i,j; { 

不抛出一个错误,因为它一个(唯一)有效的语法,仙界。

目前它是无效,但不再使用。

如果需要,您可以阅读更多关于K&R style syntax here的信息。

1

void func(i, j) 
int i,j; //declare types of arguments 
{ 
    //function body 
} 

被称为K&R语法。它已经过时,但仍用于一些C项目,如bash

相关问题