Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
定义中函数标题后的C变量声明_C_Variables_Freebsd_C99_C89 - Fatal编程技术网

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

定义中函数标题后的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; 当您调

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

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


我引用的函数标题字符串如下:
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风格,“那么他们可能不会改变他们的编译器来与他们的风格相矛盾。詹姆斯,你是对的。我在寻找答案时没有遇到这个问题。对不起!