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

考虑到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(!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问题。你想用这个解决的真正问题是什么?