Пометка библиотечных функций как устаревших / непригодных для использования без изменения их исходного кода - PullRequest
9 голосов
/ 21 октября 2009

У меня есть большая кодовая база, которая использует ряд небезопасных функций, таких как gmtime и strtok. Вместо того, чтобы пытаться искать в базе кода и заменять их оптом, я бы хотел, чтобы компилятор выдавал предупреждение или ошибку при их обнаружении (чтобы подчеркнуть проблему для разработчиков обслуживания). Это возможно с GCC?

Я уже знаю о __attribute__((deprecated)), но AFAIK Я не могу использовать его, так как у меня нет контроля над заголовочными файлами, где эти функции объявлены.

Ответы [ 2 ]

12 голосов
/ 21 октября 2009

Создать пользовательский заголовок deprecated.h. Там создайте свои собственные функции-оболочки, deprecated_strtok() и так далее, которые просто вызывают strtok. Отметьте их __attribute__((deprecated)). Ниже этих определений #define strtok deprecated_strtok. Наконец, используйте -include deprecated.h

7 голосов
/ 21 октября 2009

Попробуйте это в исходном файле, если у вас достаточно свежего gcc, он не должен позволять разработчикам использовать обе эти функции.

#pragma GCC poison gmtime
#pragma GCC poison strtok

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

Яд может быть немного сложным, поскольку он выдает ошибки, а не предупреждения. Кто-нибудь знает, как его ослабить? По крайней мере, это хороший способ обеспечить соблюдение политики НЕ ИСПОЛЬЗОВАТЬ ФУНКЦИЮ xxx.

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