簡體   English   中英

函數聲明的宏不起作用

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM