Удалить неиспользуемые прототипы функций из файла .h - PullRequest
3 голосов
/ 02 ноября 2010

Мне нужно удалить несколько прототипов функций из нескольких файлов .h, и мне было интересно, есть ли какой-нибудь сценарий / программа bash, чтобы найти прототипы, которых нет в файле .c, и автоматически удалить их.

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

Обратите внимание, что он не имеет ничего общего сдвоичный, я хочу удалить их из кода.

Ответы [ 5 ]

2 голосов
/ 02 ноября 2010

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

1 голос
/ 03 ноября 2010

Я попробовал и cproto, и makeheaders.

Первый работает, как и ожидалось: я создал файлы заголовков, затем скопировал определения typedef, включил их в другие файлы заголовков (важно!) И т. Д.и все работало нормально.

makeheaders немного сложнее / умнее, так как он создает .h после включений в .c, поэтому другие включения в .h не требуются.

1 голос
/ 02 ноября 2010

Это не совсем то, что вы хотите, но может подойти ближе.Если вы используете doxygen, вы можете создать целую кучу списков, а также визуализировать их в виде графиков.Одним из них является отношение called by для функций, а другим - отношение included by для файлов.

Вам не нужно помещать специальные комментарии doxygen, вы можете просто использовать их для получения структурной информациио вашем проекте.

1 голос
/ 02 ноября 2010

Возможно, вы сможете реализовать этот цикл на вашем любимом языке сценариев:

Для каждого файла .c найдите соответствующий файл .h. Сделайте все прототипы в файле .h статическими. Скомпилируйте файл .c. Устранить ошибки компилятора относительно неопределенных статических объявлений. Вернуть оставшиеся прототипы.

1 голос
/ 02 ноября 2010

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

...