Да, есть, поскольку вы используете Visual Studio.
В Visual Studio IDE имеется мощный механизм поиска и замены. Вы, кажется, предполагаете, что он может обрабатывать только литеральные строки. Это может сделать больше. Нажмите Ctrl - Shift - H для глобального поиска и замены. В разделе «Параметры поиска» выберите «Использование: Подстановочные знаки».
Теперь замените FHEADGRP(*)
на bool _process_grp\1( grp_id_t , unsigned char )
Подстановочный знак - *
, а \1
- обратная ссылка.
[править]
Макросы работают на токенизированном источнике, но поиск и замена работают на символах. Это может вызвать небольшую проблему. Рассмотрим случаи FHEADGRP(Foo)
и FHEADGRP( Foo )
. Для макроса C они эквивалентны, но во втором случае обратная ссылка расширится до Foo
- с пробелами.
Обходной путь должен использовать регулярные выражения, в частности заменить FHEADGRP\(:b*(.*):b*\)
на bool _process_grp\0( grp_id_t , unsigned char )
. Я считаю, что реализация VS2005 немного глючит; например, простое выражение ?
не соответствует одному пробелу. Но приведенный выше пример должен работать.