ein*_*ica 9 c c++ typedef function
我定义了:
typedef int FunkyFunc(int x);
Run Code Online (Sandbox Code Playgroud)
现在,我希望能够在类型函数的定义中使用此typedef FunkyFunc,例如
FunkyFunc f {
return 2*x;
}
Run Code Online (Sandbox Code Playgroud)
要么
FunkyFunc f(int x) {
return 2*x;
}
Run Code Online (Sandbox Code Playgroud)
要么
FunkyFunc f(x) {
return 2*x;
}
Run Code Online (Sandbox Code Playgroud)
我能做类似上面的任何事吗?他们似乎都没有编译.
这在标准草案部分的C++中是不正确的.函数第10段说:8.3.5
函数类型的typedef可用于声明函数,但不能用于定义函数(8.4).[例如:
Run Code Online (Sandbox Code Playgroud)typedef void F(); F fv; // OK: equivalent to void fv(); F fv { } // ill-formed void fv() { } // OK: definition of fv- 示例] [...]
我们可以在C中看到,这也是C99草案标准部分中特别禁止的.6.9.1 功能定义说:
函数定义中声明的标识符(函数的名称)应具有函数类型,由函数定义的声明符部分指定.141)
和脚注141说:
目的是函数定义中的类型类别不能从typedef继承:
并有以下示例:
typedef int F(void); // type F is ‘‘function with no parameters
// returning int’’
F f, g; // fand g both have type compatible with F
F f { /* ... */ } // WRONG: syntax/constraint error
[...]
Run Code Online (Sandbox Code Playgroud)
除了脚注之外,C11说的是同样的事情162.
不,您可以使用 typedef 来声明函数:
FunkyFunc f;
Run Code Online (Sandbox Code Playgroud)
但函数定义必须使用函数风格的声明符编写。
注意:C++ 中确实是这样,我相当确定 C 在这方面也是一样的;但如果您选择单一语言来询问会更好,因为 C 和 C++ 之间可能存在显着差异,即使您可能认为它们是相同的。