c - 使用#defines 并将函数传递给它们

标签 c

海湾合作委员会 4.4.2 c89

我用 c89 重新设计了一些代码。但是,我对使用以下#defines 的代码完全感到困惑。所以我创建了一个小应用程序,也许我会更多地了解它是如何工作的。

据我所知,MODULE_API 将传递一个函数名称并调用宏 MODULE_SOURCE_API 并将名称和函数连接起来。所以我创建了一个名为 print_name 的简单函数并运行了代码。我收到以下错误消息:

implicit declaration of function ‘print_name’
undefined reference to `print_name'

这样做的主要原因是什么?

#include <stdio.h>

#define MODULE_SOURCE_API(name, func) name##_##func
#define MODULE_API(func) MODULE_SOURCE_API(mod_print, func)

void MODULE_API(print_name)(const char const *name);

int main(void)
{
    printf("=== Start program ===\n");

    print_name("Joe bloggs");

    printf("== End of program ===\n");

    return 0;
}

void MODULE_API(print_name)(const char const *name)
{
    printf("My name is [ %s ]\n", name);

}

非常感谢任何建议,

编辑==== 我刚刚做了一个更正,我应该调用

MODULE_API(print_name)("Joe Bloggs");

但是我怎样才能打印出连接的结果呢?这样做的原因是什么?

非常感谢,

最佳答案

#define MODULE_SOURCE_API(name, func) name##_##func
#define MODULE_API(func) MODULE_SOURCE_API(mod_print, func)

 void MODULE_API(print_name)(const char const *name);

这将生成一个名为 mod_print_print_name 的函数,而不是 print_name

您可以在 gcc 上使用 -E 选项检查它。

gcc -E ak.c 给出

/* ...... */
void mod_print_print_name(const char const *name);

int main(void)
{
   printf("=== Start program ===\n");

   print_name("Joe bloggs");

   printf("== End of program ===\n");

   return 0;
}

void mod_print_print_name(const char const *name)
{
   printf("My name is [ %s ]\n", name);

}

关于c - 使用#defines 并将函数传递给它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2131145/

相关文章:

c - 如何将数组传递给函数而不在函数外部更改它?(数组不是全局的)

c - 将四边形转换为三角形带的最快方法?

c - 使用 ptrace 解析 Call 和 Ret。

python - 提高 Python + numpy 数组分配/初始化性能

c - 在函数之间传递指针

c - ARM GDB 无法仅在 Linux 上访问内存

c - 访问不同结构的相同成员

c - <错误 : expected expression> while initializing char array

c - UART1_Write(13) 无法正常工作

c - 链表追加中指针的指针