小编teh*_*ftw的帖子

是否可以"typedef"(各种)一个函数原型?

我有多个彼此相似的函数 - 它们接受相同的参数,并返回相同的类型:

double mathFunction_1(const double *values, const size_t array_length);
Run Code Online (Sandbox Code Playgroud)

我已经使用了typedef'd指向那些函数的指针,因为我将它们存储为一个数组,以便在相同的数据上轻松使用它们,映射它们等:

typedef double (* MathFunction_ptr )(const double *, const size_t);

double proxy(MathFunction_ptr mathfun_ptr, const double *values, const size_t array_length);
Run Code Online (Sandbox Code Playgroud)

我想要实现的是与声明和定义函数类似的易用性,就像我已经使用指针一样.


因此,我正在考虑使用类似的typedef来让我更容易编写实际的函数.我尝试这样做:

// declaration
typedef double MathFunction (const double *values, const size_t array_length);
MathFunction mathFunction_2;
Run Code Online (Sandbox Code Playgroud)

以下方法部分起作用.它允许我在声明中"保存一些键击",但是必须完全输入定义.

double mathFunction_2(const double *values, const size_t array_length)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我通过搜索更多这个问题找到的是:函数原型typedef可以用在函数定义中吗?

然而,它没有提供很多替代方案,只是重申我根据标准禁止在我的其他实验中尝试做的事情.它提供的唯一选择是使用

#define FUNCTION(name) double name(const double* values, size_t array_length)
Run Code Online (Sandbox Code Playgroud)

这听起来很笨(因为我对使用预处理器持谨慎态度和怀疑态度).

我正在尝试做什么的替代方案是什么?


我试过的另外两种方法不起作用(而且,正如我刚才所读,根据C标准6.9.1禁止和绝对错误):

1.这种方法不起作用,因为这意味着我告诉它定义一个变量mathFunction_2(我相信变量被视为一个指针,虽然我还不太了解它),就像一个函数:

MathFunction mathFunction_2
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

2.这种方法不起作用,因为它意味着我告诉它创建一个返回函数的函数(在C语言中不可接受):

MathFunction mathFunction_2() …
Run Code Online (Sandbox Code Playgroud)

c typedef function-prototypes

6
推荐指数
2
解决办法
323
查看次数

标签 统计

c ×1

function-prototypes ×1

typedef ×1