首页 > 解决方案 > 用于删除除受保护部分之外的所有输入代码的 C 宏

问题描述

鉴于 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().

实际上,我不需要真正删除未受保护的输入,因为它应该被编译,就像在第一次调用中一样。因此,如果有某种方法可以让编译器在不删除文本或不使用注释的情况下忽略文本,它也可以工作。

这可能吗,还是我需要使用m4来做这样的事情?

标签: cpreprocessor

解决方案


推荐阅读