Многострочная репликация кода с препроцессором C - PullRequest
0 голосов
/ 06 февраля 2019

Я хочу скопировать некоторые фрагменты кода, используя препроцессор Си.Я знаю, как обрабатывать многострочные макросы, но я сталкиваюсь с двумя трудностями:

  1. Я не нашел способа встроить комментарии в макрос,

  2. Сгенерированный вывод не имеет новых строк.

Например, вот что я хотел бы сделать:

#define Snippet \
// This is my snippet \
a= b + c;

(вроде).

Желаемый сгенерированный вывод:

// This is my snippet
a= b + c;

Есть ли у вас решения для 1. и 2.?Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Для тех, кто заинтересован, я решил следующее:

  1. Следующий макрос позволяет вставлять комментарии в стиле C ++:

    #define Comment(Text) #/#/ Text
    
  2. Я добавляю зарезервированный символ перед концом каждой строки.После раскрытия макроса я перевожу его на новую строку с макросом поиска / замены.

    #define Snippet \
    Comment(This is my snippet)@\
    a= b + c;
    

раскрывается как

// This is my snippet@a= b + c;

и после подстановки

// This is my snippet
a= b + c;

Я все еще ищу способ получить символ, который расширился бы до новой строки, хотя текущим решением уже можно управлять.

0 голосов
/ 06 февраля 2019

Проблема с макросом, как вы показываете, заключается в том, как работает процесс компиляции.

Если вы посмотрите, например, эту ссылку на фазу перевода C , вы увидите продолжение строкипроисходит на этапе 2, затем комментарии заменяются пробелом на этапе 3, и, наконец, предварительная обработка происходит на этапе 4.

То есть после этапа 2 получается

#define Snippet // This is my snippet a= b+c;

Затем послепри замене комментариев на этапе 3 определение макроса становится пустым.

Решение для комментариев заключается в использовании блочных комментариев с использованием /* и */.

Не существует решения для продолжения строки.проблема, как это должно работать.

...