gpt4 book ai didi

c - 这两个参数在 typedef 中意味着什么?

转载 作者:太空狗 更新时间:2023-10-29 17:18:21 24 4
gpt4 key购买 nike

我有一段代码,但我不明白那个typedef:

typedef void (inst_cb_t) (const char*, size_t);

这是否实际上意味着您现在可以将 inst_cb_t 用作 void?但是第二个括号中的内容呢?

最佳答案

声明

typedef void (inst_cb_t) (const char*, size_t);

inst_cb_t 定义为一个函数,它接受两个类型为 const char*size_t 的参数并返回 void .

此声明的一个有趣部分是您只能在函数声明和指向函数减速的指针中使用它。

inst_cb_t foo;  

你不能像这样在函数定义中使用它

inst_cb_t foo      // WRONG
{
// Function body
}

看C标准:

C11: 6.9.1 函数定义:

The identifier declared in a function definition (which is the name of the function) shall have a function type, as specified by the declarator portion of the function definition.162)

脚注162是

The intent is that the type category in a function definition cannot be inherited from a typedef:

typedef int F(void);              // type F is ‘‘function with no parameters
// returning int’’
F f, g; // f and g both have type compatible with F
F f { /* ... */ } // WRONG: syntax/constraint error
F g() { /* ... */ } // WRONG: declares that g returns a function
int f(void) { /* ... */ } // RIGHT: f has type compatible with F
int g() { /* ... */ } // RIGHT: g has type compatible with F
F *e(void) { /* ... */ } // e returns a pointer to a function
F *((e))(void) { /* ... */ } // same: parentheses irrelevant
int (*fp)(void); // fp points to a function that has type F
F *Fp; // Fp points to a function that has type F

关于c - 这两个参数在 typedef 中意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28587347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com