定义中函数标题后的C变量声明

在阅读一些FreeBSD源代码时(参见: radix.h第158-173行),我发现了定义中“函数标题”之后的变量声明。

这在ISO C(C99)中有效吗? 什么时候应该在生产代码中完成而不是仅仅在“函数标题”中声明变量? 为什么要在这里完成?

我指的是标题字符串的函数,如下所示: int someFunction(int i, int b) {

这看起来像K&R(前ANSI)风格。 我不认为这是有效的C99,但他们是否使用C99? 乔尔

我认为你指的是在C语言中声明参数的“老式”前ANSI方式。它看起来像这样:

 int foo(a, b) int a, int b { /* ... */ } 

这在C99中可能仍然有效,并且由于向后兼容性原因而被编译器接受,但它应被视为已弃用/过时。

呃。 也许我误解了你的问题,但ib中的代码片段是函数的参数。 它不是在函数中声明变量的一种紧凑方式,例如:

 int someFunction() { int i, b; 

当你调用someFunction ,你传递那些参数:

 someFunction(1, 2); // `i` will be `1` and `b` `2` within `someFunction`