打印
[其他ST产品]

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

[复制链接]
201|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
stormwind123|  楼主 | 2024-1-18 15:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用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;

使用特权

评论回复
沙发
jcky001| | 2024-2-18 10:37 | 只看该作者
它的主要作用是在宏定义中连接两个参数或标识符,形成一个新的标识符或参数。

使用特权

评论回复
板凳
光辉梦境| | 2024-2-21 12:08 | 只看该作者
在C语言中,##是预处理操作符,用于将两个符号连接成一个符号。这个操作符通常被称为"连接"操作符

使用特权

评论回复
地板
冰春彩落下| | 2024-2-21 16:00 | 只看该作者
这在宏定义中非常有用,因为它允许我们根据宏参数的值来动态地生成标识符或表达式

使用特权

评论回复
5
夜阑风雨| | 2024-2-21 20:00 | 只看该作者
##操作符在宏定义中的作用是允许我们根据宏参数的值来动态地生成标识符或表达式

使用特权

评论回复
6
淡漠安然| | 2024-2-21 23:30 | 只看该作者
这个有点意思,确实很少使用这种

使用特权

评论回复
7
暖了夏天蓝了海| | 2024-2-22 02:00 | 只看该作者
##操作符出现在宏定义中时,它可以用来将宏参数和其他文本连接在一起,从而形成一个新的标识符或表达式

使用特权

评论回复
8
别乱了阵脚| | 2024-2-22 06:00 | 只看该作者
这种就是连接符,但是为啥这么用,不懂

使用特权

评论回复
9
一秒落纱| | 2024-2-22 10:00 | 只看该作者
这是为了动态地生成标识符或表达式

使用特权

评论回复
10
远山寻你| | 2024-2-22 14:00 | 只看该作者
. ##操作符在宏定义中的作用是为了增加宏的灵活性和通用性

使用特权

评论回复
11
江河千里| | 2024-2-22 21:00 | 只看该作者
是想让两个函数连接起来

使用特权

评论回复
12
三生万物| | 2024-2-23 01:00 | 只看该作者
. ##操作符我也是第一次看到,以前都没用过

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

299

主题

1208

帖子

1

粉丝