具有命名参数的函数指针?

糖饭

我最近在C程序中遇到了一个奇怪的语法。

struct connector_agent_api{
    bool (*receive)(slot *s, uint8_t *data, uint8_t length);
}

“接收”是一个函数指针吗?

如果它是一个函数指针,为什么它有命名参数?应该像下面的吗?

bool (*receive)(slot *, uint8_t *, uint8_t);

它当然可以编译并在库中使用。我在互联网上进行了大量搜索,并试图证明这种语法的合理性。我仍然不知道为什么这个东西可以编译... :(

dbush

函数指针中的参数名称是可选的,就像函数声明中的参数名称是可选的一样。这是因为不使用给定的参数名称,因此两种格式都允许。

C标准的关于函数声明符的6.7.6.3节中,其中包括函数原型和函数指针,第6段指出:

参数类型列表指定函数参数的类型,并可以声明该函数的参数的标识符。

函数参数需要名称的唯一地方是在函数的实际定义中。

对于函数定义,第6.9.1p5节规定:

如果声明符包括一个参数类型列表,则每个参数的声明都应包含一个标识符,但由单个类型的参数组成的参数列表的特殊情况除外,在这种情况下,应该没有标识符。没有声明清单。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章