Добавление объявлений пространства имен для многих файлов? - PullRequest
2 голосов
/ 01 августа 2011

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

//pre-processor commands and other stuff not in the namespace
namespace foo
{
    //previously existing code
}
//EOF

Любой способ сделать это без необходимости открывать каждый файл вручную?Лучшее, что я смог до сих пор придумать, - это макрос emacs, чтобы сделать это для каждого файла, но мне все еще нужно пройти через каждый из них.

1 Ответ

4 голосов
/ 01 августа 2011
#!/bin/bash
for f in *.h
do
  line=`grep -n '^#' $f | tail -1 | cut -f1 -d:`
  head -$line $f > tempfile
  echo 'namespace foo {' >> tempfile
  let line++
  tail --lines=+$line $f >> tempfile
  echo '} // end namespace foo' >> tempfile
  mv tempfile $f
done

Это будет проходить через каждый заголовочный файл в текущем каталоге, и:

  • найти последнюю строку препроцессора (она также начинается с '#')
  • выгрузить первую часть файла во временный файл
  • добавить строку, чтобы открыть пространство имен
  • добавить оставшуюся часть существующего файла
  • добавить строку, чтобы закрыть пространство имен
  • замените файл временным файлом

Обратите внимание, что если вы хотите использовать и файлы cpp, первая строка должна быть for f in *.h *.cpp.Но если ваши cpp-файлы имеют статические функции или анонимное пространство имен, то это не сработает.

Обратите внимание, что это предполагает, что ваши заголовочные файлы не защищены классической защитой включения.Предполагается, что все команды препроцессора находятся в верхней части файла.Если это не так, вам придется внести некоторые коррективы.Попробуйте это на некоторых ваших файлах, настройте по мере необходимости, и попробуйте еще несколько.

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