海湾合作委员会 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/