这个奇怪的函数定义是什么意思?

我在博客文章中遇到了这个C程序:

main() { int n; n = 151; f(n); } f(x) int x; { printf("%d.\n", x); } 

这篇文章没有解释。 任何人都可以解释这个奇怪的函数定义意味着什么吗?

这是K&R风格的C代码,它仍然是有效的C语法,但我建议你不要在新编写的代码中使用它。

 f(x) int x; 

相当于ANSI C:

 void f(int x) 

K&R C是Brian Kernighan和Dennis Ritchie在C编程语言第一版中描述的C语言,并以两位作者的名字命名。 本书的第二版更新为使用ANSI C.

 f(x) int x; { printf("%d.\n", x); } 

是一种定义function的旧方法。 现在它可以被解读为

 void f(int x) { printf("%d.\n", x); } 

这段代码很糟糕。

  1. functionf()过时声明
  2. main()之前应该有f()前向声明
  3. f()缺少返回类型

请更改您的c学习资源!

这是一种非常古老的C风格(K&R C)。

 f(x) int x; {} 

相当于

 void f(int x) {} 

你真的不应该浪费时间去学习那些。

寻找教授ANSI C C89 / C90的资料,并注意到C99的新function(许多编译器没有广泛采用,所以要了解不同之处)

这是一种非常古老的编码风格。 这在ANSI中不起作用。 更好地使用像

 void f(int x) { ... ... ...;/*Whatever is required*/ }