我想使用宏来轻松更改函数声明,这是我现在拥有的:
#define MYDECLARATION(name) void name (void)
当我调用 MYDECLARATION(my_thread) 时;我得到一个错误:
identifier-list paramters may only be used in a function definition.
我试过像那样使用##:
#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 示例.c
int main(int argc, char **argv)
{
void my_thread (void);
return 0;
}
你知道,你不能那样调用函数。它应该被称为 my_thread(); 我对你的宏进行了更改 - #define MYDECLARATION(name) name() 它工作正常。希望对您有所帮助。
关于c - 函数声明的宏不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19185038/