字符串作为C中带参数的宏

字符串作为C中带参数的宏,c,macros,C,Macros,考虑到以下因素: Page 1 of 100 其中1和100不是固定值 如何定义一个C宏,以便通过将两个值作为参数传递来呈现该字符串 为明确起见,格式必须如下所示: #define PAGE_IDX_MACRO(x,y) 您可以通过双哈希标记连接字符串: 提供一种方法,用于在执行过程中[串联实际参数][1] 宏观扩张 [1] : 从这个问题: 您可以通过双哈希标记连接字符串: 提供一种方法,用于在执行过程中[串联实际参数][1] 宏观扩张 [1] : 从这个问题: 运算符将预处理器标记转

考虑到以下因素:

Page 1 of 100
其中1和100不是固定值

如何定义一个C宏,以便通过将两个值作为参数传递来呈现该字符串

为明确起见,格式必须如下所示:

#define PAGE_IDX_MACRO(x,y)

您可以通过双哈希标记连接字符串:

提供一种方法,用于在执行过程中[串联实际参数][1] 宏观扩张

[1] :

从这个问题:


您可以通过双哈希标记连接字符串:

提供一种方法,用于在执行过程中[串联实际参数][1] 宏观扩张

[1] :

从这个问题:

运算符将预处理器标记转换为字符串文字

字符串文本在C中通过简单地在它们之间添加一个空格来连接,即helloworld相当于helloworld

因此,宏应该是:

#define PAGE_IDX_MACRO(x, n) ("Page " #x " of " #n)
假设它是这样称呼的:

PAGE_IDX_MACRO(1, 100);
其中1和100是编译时常量。

运算符将预处理器标记转换为字符串文字

字符串文本在C中通过简单地在它们之间添加一个空格来连接,即helloworld相当于helloworld

因此,宏应该是:

#define PAGE_IDX_MACRO(x, n) ("Page " #x " of " #n)
假设它是这样称呼的:

PAGE_IDX_MACRO(1, 100);

其中1和100是编译时常量。

既然你说的是字符串,即使你没有使用引号,也要查找stringize操作符。既然你说的是字符串,即使你没有使用引号,也要查找stringize操作符。虽然我不确定这里真的需要这样做-定义PAGE_IDX_MACROx,y PAGE x of y应该做,可能是stringized,可能是通过使用另一个间接预处理器。我认为这里没有真正的连接。虽然我不确定这里是否真的需要-定义PAGE_IDX_MACROx,y PAGE x of y应该这样做,可能是字符串化的,可能是通过使用另一个间接预处理器。我认为这里没有什么是真正的连接。