C函数typedef:定义没有参数列表的函数
C function typedef: defining function without parameter list
我的程序有几十个(可能超过 100 个)具有相同参数列表和 return 类型的函数。我也可能想为这些函数添加参数。那么,有什么方法可以用 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语句。
这有可能吗?
您可以像这样使用预处理器宏
#define FUNCTION(function) int function(int x, int y)
/* prototype */
FUNCTION(f1);
/* definition */
FUNCTION(f1)
{
/* do something here, for example */
return y - x;
}
不能使用 typedef,但可以使用宏 :
#define FUNCTION(name) int name(int x, int y)
FUNCTION(f1) {
// ...
}
FUNCTION(f2) {
// ...
}
#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)
不,不是真的。使用 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!
我的程序有几十个(可能超过 100 个)具有相同参数列表和 return 类型的函数。我也可能想为这些函数添加参数。那么,有什么方法可以用 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语句。 这有可能吗?
您可以像这样使用预处理器宏
#define FUNCTION(function) int function(int x, int y)
/* prototype */
FUNCTION(f1);
/* definition */
FUNCTION(f1)
{
/* do something here, for example */
return y - x;
}
不能使用 typedef,但可以使用宏 :
#define FUNCTION(name) int name(int x, int y)
FUNCTION(f1) {
// ...
}
FUNCTION(f2) {
// ...
}
#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)
不,不是真的。使用 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!