[英]Macro for function declaration not working
我想使用宏来轻松更改函数声明,这是我现在所拥有的:
#define MYDECLARATION(name) void name (void)
当我调用 MYDECLARATION(my_thread); 我收到一个错误:
标识符列表参数只能在函数定义中使用。
我试着像这样使用##:
#define MYDECLARATION(name) void ##name (void)
但我很确定我会在我的代码中得到: voidmythread (void)
。 你知道怎么做吗?
如果你知道一些关于宏的不错的教程,我也很感兴趣。
回应位掩码评论:
我正在使用 KEIL 编译器,然后我的线程工作如下:
#define MYDECLARATION(name) __task void name(void)
我的电话:
MYDECLARATION(Mythread);
我的定义:
__task void Mythread(void)
{
//...
}
新测试:
#define RET_TEST __task void
#define PARAMETER void
RET_TEST MYDECLARATION(PARAMETER);
这是有效的......所以我想这是将宏参数用于不起作用的函数名称的事实......
理解预处理输出的最好方法是使用 gcc 的 -E 选项。
显然,我复制了你的程序。
#define MYDECLARATION(name) void name (void)
#include "stdio.h"
void my_thread()
{
printf("hello world\r\n");
}
int main(int argc, char **argv)
{
MYDECLARATION(my_thread);
return 0;
}
现在, $gcc -E example.c
int main(int argc, char **argv)
{
void my_thread (void);
return 0;
}
你知道,你不能那样调用函数。 它应该被称为 my_thread(); 我在你的宏中做了一个改变 - #define MYDECLARATION(name) name() 它工作正常。 希望这对你有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.