#c #preprocessor
#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 для чего-то подобного?
Комментарии:
1. Можете ли вы уточнить, что вы хотите получить при втором вызове. вы написали » Я хочу получить только char strarg в качестве выходных данных, удалив весь остальной код, который был введен за пределами KEEP()». можете ли вы указать код результата, который вы хотите получить при втором вызове?
2. Это звучит как проблема XY. Какую реальную проблему вы пытаетесь решить с помощью этого?