请问宏定义中的##有什么用途?

2019-07-14 13:20发布



用cube生成了个freertos的工程,默认任务是通过这个函数创建的:
MX_FREERTOS_Init();
这个函数里,有两句:
osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);
  defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);
第一句中的osThreadDef是个宏定义:
#define osThreadDef(name, thread, priority, instances, stacksz)  
const osThreadDef_t os_thread_def_##name =
{ #name, (thread), (priority), (instances), (stacksz)  }
其中的 ##name,这是什么用法?

os ThreadDef_t是个结构体:
typedef struct os_thread_def  {
  char                   *name;        ///< Thread name
  os_pthread             pthread;      ///< start address of thread function
  osPriority             tpriority;    ///< initial thread priority
  uint32_t               instances;    ///< maximum number of instances of that thread function
  uint32_t               stacksize;    ///< stack size requirements in bytes; 0 is default stack size
} osThreadDef_t;

------------------------------------------------------------
以下图片是QQ群里一位朋友分享的。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
5616asaqwq
1楼-- · 2019-07-14 18:38
签到签到签到签到
吔屎蛋拉雷
2楼-- · 2019-07-14 20:57
##用来连接前后两个参数,把它们变成一个字符串。

举例说:
#define Com(x,y) x##y
int n = Com(123,456); 结果就是n=123456;
char* str = Com("asdf", "adf")结果就是 str = "asdfadf";
你给出的宏
#是预编译的象征有了这个编译器就知道他是在预编译前需要做的事
如包含文件
#include< >
#define N 100//在编译前将N全部替换为100
60user189
3楼-- · 2019-07-14 23:45
 精彩回答 2  元偷偷看……
youpukeji668
4楼-- · 2019-07-15 05:26
学习学习
HengDu
5楼-- · 2019-07-15 10:21
字符串连接吧
maqyun
6楼-- · 2019-07-15 12:20

一周热门 更多>