Tre*_*key 9 c string macros replace c-preprocessor
是否可以定义一个宏来修剪传入的字符串参数的一部分?
例如:
//can this be defined?
#define MACRO(o) ???
int main(){
printf(MACRO(ObjectT)); //prints "Object" not "ObjectT"
}
Run Code Online (Sandbox Code Playgroud)
修剪掉最后一个字符'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"
}
Run Code Online (Sandbox Code Playgroud)
这依赖于令牌粘贴操作符,##构造扩展为截断文本(或实际上是替换文本)的宏的名称,以及字符串化操作符#,以将扩展结果转换为字符串文字.还有一些必需的宏间接,以确保执行所有需要的扩展.