typedef int (xxx)(int yyy);
似乎定义了一个名为xxx
的函数指针,它指向一个整数参数为yyy
的函数。如何理解“typedef int(xxx)(int yyy);”?
但我不明白这句法......任何一个人都能给出一个好的解释吗?
我发现typedef int xxx(int yyy);
仍然有效。他们之间有什么不同?
typedef int (xxx)(int yyy);
似乎定义了一个名为xxx
的函数指针,它指向一个整数参数为yyy
的函数。如何理解“typedef int(xxx)(int yyy);”?
但我不明白这句法......任何一个人都能给出一个好的解释吗?
我发现typedef int xxx(int yyy);
仍然有效。他们之间有什么不同?
这定义了函数类型,而不是函数指针类型。
与typedef
的模式是它修改任何声明,而不是声明一个对象,它声明一个别名到对象将有的类型。
这是完全有效的:
typedef int (xxx)(int yyy); // Note, yyy is just an unused identifier.
// The parens around xxx are also optional and unused.
xxx func; // Declare a function
int func(int arg) { // Define the function
return arg;
}
C和C++语言具体地,并且幸运的是,不允许使用一typedef
名作为在函数定义的整个类型。
很好的解释!显示如何调用这个函数会有帮助,例如,是否可以在函数调用中使用'typedef'名称。 – verbose
@verbose该函数与其他函数一样被调用。 typedef名称的存在不影响任何内容。不确定它如何应用于通话。 – Potatoswatter
你可以使用这个函数类型来定义一个函数指针,就像我为了提高可读性而展示的那样。 –
是的,typedef int (xxx)(int yyy);
与定义功能类型的typedef int xxx(int yyy);
相同。您可以从第156页C 11标准草案N1570中找到一个示例。从该页面引用,
All three of the following declarations of the signal function specify exactly the same type, the first without making use of any typedef names.
typedef void fv(int), (*pfv)(int);
void (*signal(int, void (*)(int)))(int);
fv *signal(int, fv *);
pfv signal(int, pfv);
如果在声明T x
一些声明符x
,然后T x(t1 p1, t2 p2)
意味着功能使用参数P1,P2,作为声明符X是之前有返回相同的类型。周围的声明符
圆括号表示应用括号第一内部修饰。
在你的情况下,括号内没有修饰符。这意味着他们没有必要。
函数原型意味着有一个函数在某处有这个签名,它的名字是Blah。
Typedef与功能的原型意味着让我们给功能签名命名为blah。这并不意味着具有此签名的任何功能都存在。这个名字可以用作一个类型。例如:
typedef int xxx(int yyy);
xxx *func_ptr; // Declaration of a variable that is a pointer to a function.
xxx *func2(int p1); // Function that returns a pointer to a function.
'T x'是声明,'x'是声明。 – Potatoswatter
好吧,我想这一点,但我写的并不好。我会更新。 –
您可能会发现[此解释](http://c-faq.com/decl/spiral.anderson.html)有帮助。 – icktoofay
你错过了一个'*','typedef int(* xxx)(int yyy);'定义了一个函数指针 –
@AlterMann不,它不是我的代码。我认为它定义了一个函数指针,但似乎没有,我不知道。 – Sayakiss