定义中函数标题后的C变量声明
在阅读一些FreeBSD源代码(参见:第158-173行)时,我发现变量声明紧跟在定义中的“函数标题”之后 这在ISO C(C99)中有效吗?什么时候应该在生产代码中完成这项工作,而不仅仅是在“函数标题”中声明变量?为什么要在这里完成定义中函数标题后的C变量声明,c,variables,freebsd,c99,c89,C,Variables,Freebsd,C99,C89,在阅读一些FreeBSD源代码(参见:第158-173行)时,我发现变量声明紧跟在定义中的“函数标题”之后 这在ISO C(C99)中有效吗?什么时候应该在生产代码中完成这项工作,而不仅仅是在“函数标题”中声明变量?为什么要在这里完成 我引用的函数标题字符串如下:intsomefunction(inti,intb){Er。也许我误解了你的问题,但该代码段中的I和b是函数的参数。这不是在函数中声明变量的紧凑方式,比如: int someFunction() { int i, b; 当您调
我引用的函数标题字符串如下:
intsomefunction(inti,intb){
Er。也许我误解了你的问题,但该代码段中的I
和b
是函数的参数。这不是在函数中声明变量的紧凑方式,比如:
int someFunction() {
int i, b;
当您调用someFunction
时,您将这些参数传递给它:
someFunction(1, 2); // `i` will be `1` and `b` `2` within `someFunction`
这看起来像是K&R(前ANSI)风格。我不认为这是有效的C99,但他们使用的是C99吗?Joel我想你指的是用C声明参数的“老式”前ANSI方式。它看起来像这样:
int foo(a, b)
int a,
int b
{
/* ... */
}
这在C99中可能仍然有效,并且出于向后兼容性的原因,编译器将接受它,但它应被视为已弃用/过时。C99支持K&R样式的函数定义(它们已弃用,但仍受支持).K&R样式声明在C99中是有效的,除了在C99中所有参数都必须显式声明,而在K&R(和C89/90)
int
中,参数可以不声明。@James McNellis:有趣-我还以为C99中也删除了对K&R样式函数定义的支持。我不确定为什么……简而言之,C说:“虽然编译器仍然支持此符号,但它已被弃用。在新的C源代码中,仅对函数定义使用原型符号…”(第98页,第一版,2005年)如果它是“Berkeley风格,“那么他们可能不会改变他们的编译器来与他们的风格相矛盾。詹姆斯,你是对的。我在寻找答案时没有遇到这个问题。对不起!