Скрипт или команда для автоматического изменения некоторых вещей в моем C-коде? - PullRequest
1 голос
/ 12 января 2012

У меня есть несколько файлов C. и я создал функцию с именем

X_STRING(arg1,arg2,arg3,arg4);

Я вызывал эту функцию слишком много раз из разных C-файлов. Я хочу заменить вызов всех этих функций на X_STRING (arg1, arg2, (arg1) * 2, (arg2) * 3);

awk, кажется, решение, но я не знаю, как лечить все случаи, потому что я должен рассмотреть случай, где:

  1. Я вызываю функцию с новыми строками, вставленными в код между аргументами difnet

1012 *, например *

X_STRING(
arg1, arg2,
arg3, 
arg4);
  1. аргумент содержит круглые скобки:

, например

X_STRING(arg1, arg2, (arg3 - 4)*3, arg4);

Кто-то может подсказать мне хорошие инструменты для решения моей проблемы?

Ответы [ 2 ]

1 голос
/ 12 января 2012

Если вы не возражаете против изменения формата в выходных данных, вы можете быть довольны решением m4. Поместите в файл следующее:

define( X_STRING, ``X_STRING''( $1, $2, ($1) * 2, ($2) * 3 ))

А затем запустите:

$ m4 def_file file.c

где file.c - ваш код, а def_file - имя файла с вышеуказанным содержимым. (Имя не имеет значения.)

Это должно работать, если ваш код хорошо отформатирован. (Если у вас есть несоответствующие скобки, это не удастся.) Это изменит пробел, но в противном случае должно делать то, что вы хотите.

0 голосов
/ 13 января 2012

Другим решением может быть настройка компилятора GCC для этой цели с помощью плагинов GCC, написанных на расширениях C или GCC, написанных на MELT

Преимущество работывнутри компилятора вы обрабатываете внутреннее представление компилятора (например, Gimple для GCC), а не только текст.Текстовые подходы не будут работать так хорошо, если, например, вызов вашего X_STRING появляется из-за расширения макроса или встраивания функции.

Расширение компилятора GCC также имеет несколько недостатков: это GCCконкретный (и может даже зависеть от версии GCC), и это потребует нескольких дней работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...