C函数typedef:定义没有参数列表的函数

时间:2015-02-16 16:30:28

标签: c typedef function-declaration

我的程序有几十个(可能超过100个)具有相同参数列表和返回类型的函数。我也可能想为这些函数添加参数。那么,有没有办法用typedef原型(带参数列表)定义这些函数?

示例:我有几十个函数int f1 (int, int)所以我有几十个声明,如:

int f1 (int x, int y){...}
int f2 (int x, int y){...}
....
int fn(int x, int y){...}

我想定义类似的内容:

typedef int functiontype(int x, int y);
functiontype f1{...}
...
functiontype fn{...}

因此,当我需要升级这些函数时(例如使用新参数z)我只需要升级typedef语句。 这有可能吗?

4 个答案:

答案 0 :(得分:6)

不,不是真的。使用struct

typedef struct
{
    int x;
    int y;
    int z; //added
} Params;

int the_function(Params p);

这样可以避免破坏声明z的函数的源代码。

使用复合文字,您甚至可以避免命名struct

the_function((Params){ 2, 5 }); // after adding .z, the source code is unchanged. Its value is 0. Or...
the_function((Params){ .x = 2, .y = 5 }); // named arguments with C99 designated initializers!

答案 1 :(得分:3)

您可以像这样使用预处理器宏

#define FUNCTION(function) int function(int x, int y)

/* prototype */
FUNCTION(f1);
/* definition */
FUNCTION(f1)
{
    /* do something here, for example */
    return y - x;
}

答案 2 :(得分:3)

不使用typedef,但您可以使用宏:

#define FUNCTION(name) int name(int x, int y)

FUNCTION(f1) {
    // ...
}

FUNCTION(f2) {
    // ...
}

答案 3 :(得分:1)

#define STANDARD_FUNCTION(fname) int fname(int x, int y)
STANDARD_FUNCTION(f1) { /*do work; return int; */ }
STANDARD_FUNCTION(f2) { /*do work; return int; */ }
STANDARD_FUNCTION(f3) { /*do work; return int; */ }

然后,当您添加新参数时,您只需要更改:

#define STANDARD_FUNCTION(fname) int fname(int x, int y, double newParam)