【问题标题】:How to use typedef for extern function in C?如何在 C 中将 typedef 用于外部函数?
【发布时间】: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' 是我的同事编写的。我不能修改它,因为它不是我的。

标签: c typedef c11


【解决方案1】:

typedef 创建一个类型别名,而不是函数别名或其他任何东西。

您可以通过定义指向函数的文件本地指针来获得一种函数别名:

static int (*const FuncWithShortName)(char*) =
    FuncWithVeryLONGLONGLONGLONGName;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-07
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多