C宏,用于删除除受保护部件外的所有输入代码
考虑到C注释是在预处理器宏之前处理的,而且似乎不可能从宏中插入注释,我想知道我心目中的C预处理器是否不可能实现。想象一下这段代码:C宏,用于删除除受保护部件外的所有输入代码,c,preprocessor,C,Preprocessor,考虑到C注释是在预处理器宏之前处理的,而且似乎不可能从宏中插入注释,我想知道我心目中的C预处理器是否不可能实现。想象一下这段代码: KEEP_SPECIFIED_TEXT_ONLY( int myfunc(const char *strarg) { char str1[] = "just a test"; KEEP(char) str2[] = "voila"; int a=2; double b=1.0; if(!strc
KEEP_SPECIFIED_TEXT_ONLY( int myfunc(const char *strarg) {
char str1[] = "just a test";
KEEP(char) str2[] = "voila";
int a=2;
double b=1.0;
if(!strcmp(strarg,str1)) return 1;
if(!strcmp(KEEP(strarg),str2)) return 2;
return 0;
}
)
然后我想处理这部分两次。在其中一个调用中,KEEP_SPECIFIED_TEXT_ONLY
宏和KEEP
宏都将被定义为#define M(X)X
,因此输出将是可编译代码
但是在第二次调用中,我只希望将char strarg
作为输出,删除在KEEP()
之外键入的所有其余代码
实际上,我不需要真正删除不受保护的输入,因为它是要编译的,就像第一次调用一样。因此,如果有某种方法可以使编译器忽略文本而不删除文本,也不使用注释,那么它也会起作用
这是可能的,还是我需要用它来做类似的事情?您能澄清一下在第二次调用时想要得到什么吗。您已经编写了“我希望只获取char strarg作为输出,删除KEEP()之外键入的所有其他代码。”您能给出第二次调用时希望获得的结果代码吗?这听起来像是XY问题。你想用这个解决的真正问题是什么?