【发布时间】:2018-06-09 14:07:41
【问题描述】:
我的项目中有两个用 C11 编写的模块:“test1.c”和“test2.c”。 模块'test1.c':
int FunctionWithVeryLONGLONGLONGLONGName(char* data)
{
// do something
}
模块'test2.c':
extern int FunctionWithVeryLONGLONGLONGLONGName(char* data);
int main(void)
{
char data[ DATA_LEN + 1 ] = { "test_data" };
FunctionWithVeryLONGLONGLONGLONGName(data);
return 0;
}
我想在模块“test2.c”中为函数“FunctionWithVeryLONGLONGLONGLONGName”使用短名称,而不修改模块“test1.c”。 F.e.,像这样:
FuncWithShortName(data);
我尝试做:
extern int FunctionWithVeryLONGLONGLONGLONGName(char* data);
typedef int FunctionWithVeryLONGLONGLONGLONGName(char* data);
FunctionWithVeryLONGLONGLONGLONGName FuncWithShortName;
int main(void)
{
char data[ DATA_LEN + 1 ] = { "test_data" };
FuncWithShortName(data);
return 0;
}
但是编译器报错了: “函数 FunctionWithVeryLONGLONGLONGLONGName 的定义需要括号。” 我做错了什么?
【问题讨论】:
-
typedef不是这样做的。如果使用正确,它会创建一个 type 的别名。它不能用于缩短任意符号。 -
你应该专注于解决你最大的问题——为什么函数名字这么长?
-
你可以做
#define shortname FunctionWithVeryLONGLONGLONGLONGName。这会将shortname扩展为长名称。 -
我正在看这个例子。这里 'typedef' 用于函数,我想在这个例子中找到类似的技巧:stackoverflow.com/questions/20840822/…
-
Module 'test2.c' 是我的同事编写的。我不能修改它,因为它不是我的。