我可以在函数定义中使用函数typedef吗?

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)

我能做类似上面的任何事吗?他们似乎都没有编译.

Sha*_*our 9

这在标准草案部分的C++中是不正确的.函数第10段说:8.3.5

函数类型的typedef可用于声明函数,但不能用于定义函数(8.4).[例如:

typedef void F();
F fv; // OK: equivalent to void fv();
F fv { } // ill-formed
void fv() { } // OK: definition of fv
Run Code Online (Sandbox Code Playgroud)

- 示例] [...]

我们可以在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.


Mik*_*our 5

不,您可以使用 typedef 来声明函数:

FunkyFunc f;
Run Code Online (Sandbox Code Playgroud)

但函数定义必须使用函数风格的声明符编写。

注意:C++ 中确实是这样,我相当确定 C 在这方面也是一样的;但如果您选择单一语言来询问会更好,因为 C 和 C++ 之间可能存在显着差异,即使您可能认为它们是相同的。