宏可以从其参数中删除字符吗?

2024-03-30

是否可以定义一个宏来修剪传入的字符串参数的一部分?

例如:

//can this be defined?  
#define MACRO(o) ???

int main(){
   printf(MACRO(ObjectT)); //prints "Object" not "ObjectT"
}

宏是否可以删除最后一个字符“T”?


您可以对预先知道的特定字符串执行此操作,将其作为符号而不是字符串文字呈现给宏,但不适用于一般符号,根本不适用于字符串文字。例如:

#include <stdio.h>

#define STRINGIFY(s) # s
#define EXPAND_TO_STRING(x) STRINGIFY(x)
#define TRUNCATE_ObjectT Object
#define TRUNCATE_MrT Pity da fool
#define TRUNCATE(s) EXPAND_TO_STRING(TRUNCATE_ ## s)

int main(){
   printf(TRUNCATE(ObjectT)); // prints "Object"
   printf(TRUNCATE(MrT));     // prints "Pity da fool"
}

这依赖于令牌粘贴运算符,##,构造扩展为截断文本(或者实际上是替换文本)的宏的名称,以及字符串化运算符,#,将扩展结果转换为字符串文字。其中还有一些必需的宏间接寻址,以确保执行所有所需的扩展。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

宏可以从其参数中删除字符吗? 的相关文章

随机推荐