[英]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.