在C中,如何在函数名和功能块之间声明变量才能被编译为有效?

问题描述 投票:1回答:3

C lang FAQ,我找到了以下代码:

void f(ipp)
int **ipp;
{
    static int dummy = 5;
    *ipp = &dummy;
}

我测试了使用-Wall -std=c11 -pedantic标志进行编译,并且编译时没有警告或错误。这怎么可能-在函数名称及其块之间声明一个变量?

c c11
3个回答
4
投票

不是any变量,它是函数参数。只是另一种编程风格,称为K&R风格。

一些additional read


1
投票

很久以来不赞成使用此语法,但在C17中仍然有效。该功能的删除最近已投票给C2x,请参见第6.30点:

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2451.pdf


0
投票

通常,通过以下方式在C标准中定义功能定义

function-definition:
    declaration-specifiers declarator declaration-listopt compound-statement

declaration-list:
    declaration
    declaration-list declaration

将包含declaration-list的功能定义命名为具有与具有参数类型列表的功能定义相反的标识符列表的功能定义。

因此在函数声明器中使用了标识符列表

void f(ipp)
       ^^^^

需要在函数体之前声明的地方

void f(ipp)
int **ipp;
^^^^^^^^^

这是一种旧式的函数定义,不建议使用,因为这样的定义没有提供可被编译器检查的函数原型。

© www.soinside.com 2019 - 2024. All rights reserved.