C99中的哪个条款禁止通过typedef定义函数?
我知道函数定义不能通过typedef完成。 例如:C99中的哪个条款禁止通过typedef定义函数?,c,function,c99,C,Function,C99,我知道函数定义不能通过typedef完成。 例如: typedef int f_t(int x, int y); f_t fsum { int sum; sum = x + y; return sum; } 但我在C99中找不到禁止这一定义的条款。哪些条款相关,以及它们如何禁止该定义?描述功能定义的条款中立即给出了这一点: 6.9.1功能定义 约束条件 2-函数定义中声明的标识符(即函数名称)应具有函数类型,如函数定义的声明器部分所规定。141) 141)目的是函数定
typedef int f_t(int x, int y);
f_t fsum
{
int sum;
sum = x + y;
return sum;
}
但我在C99中找不到禁止这一定义的条款。哪些条款相关,以及它们如何禁止该定义?描述功能定义的条款中立即给出了这一点: 6.9.1功能定义 约束条件 2-函数定义中声明的标识符(即函数名称)应具有函数类型,如函数定义的声明器部分所规定。141) 141)目的是函数定义中的类型类别不能从typedef[…]继承 其工作方式是,在声明符(6.7.5)下,唯一的函数声明符(6.7.5.3)是那些在标识符后带有括号的声明符:
td(
参数类型列表)
td(
标识符列表opt)
因此,如果函数是通过typedef定义的,那么它没有函数声明符的语法形式,因此在6.9.1p2中无效
有助于考虑尝试的TyWIFF函数定义的语法分解:
typedef int F(void);
F f {}
| | ^^-- compound-statement
| ^-- declarator
^-- declaration-specifiers
请注意,typedef type
F
是声明说明符的一部分,而不是声明符的一部分,因此F
(声明符部分)没有函数类型。这在描述函数定义的子句中立即给出:
6.9.1功能定义
约束条件
2-函数定义中声明的标识符(即函数名称)应具有函数类型,如函数定义的声明器部分所规定。141)
141)目的是函数定义中的类型类别不能从typedef[…]继承
其工作方式是,在声明符(6.7.5)下,唯一的函数声明符(6.7.5.3)是那些在标识符后带有括号的声明符:
td(
参数类型列表)
td(
标识符列表opt)
因此,如果函数是通过typedef定义的,那么它没有函数声明符的语法形式,因此在6.9.1p2中无效
有助于考虑尝试的TyWIFF函数定义的语法分解:
typedef int F(void);
F f {}
| | ^^-- compound-statement
| ^-- declarator
^-- declaration-specifiers
请注意,typedef type
F
是声明说明符的一部分,而不是声明符的一部分,因此F
(声明符部分)没有函数类型。因为您询问禁止在函数定义中使用typedef的意图(在某些注释中),C99的基本原理是这样的:
参数列表必须显式出现在声明器中;信息技术
不能从typedef继承(见§6.7.5.3)。就是说,,
根据定义:
typedef int p(int q, int r);
以下片段无效:
p funk // weird
{ return q + r ; }
因此,typedef的函数定义似乎是不被允许的,因为在这种情况下,该定义看起来不太像一个函数。既然你问的是禁止在函数定义中使用typedef的意图(在一些评论中),C99的基本原理是这样说的: 参数列表必须显式出现在声明器中;信息技术 不能从typedef继承(见§6.7.5.3)。就是说,, 根据定义:
typedef int p(int q, int r);
以下片段无效:
p funk // weird
{ return q + r ; }
因此,typedef的函数定义似乎是不被允许的,因为在这种情况下,该定义看起来不太像函数。我已经阅读了该条款,但我不明白我们是如何获得目的的。该条款是否需要函数声明器?它只需要一个声明器。“fsum”是一个合法的声明符。@junwanghe“fsum”是一个声明符,但是没有声明说明符
f\t
它没有函数类型。谢谢,这个答案很有用。我已经阅读了这个条款,但我不明白我们是如何得到这个意图的。这个条款需要函数声明符吗?它只需要一个声明器。“fsum”是一个合法声明符。@junwanghe“fsum”是一个声明符,但没有声明说明符f\u t
它没有函数类型。谢谢,这个答案很有用。相关:相关: