Лучший способ вызвать ошибку времени компоновки для устаревших функций, которые вы не хотите, чтобы люди использовали, состоит в том, чтобы убедиться, что устаревшие функции не присутствуют в библиотеках, что делает их одним этапом после «устаревших».
Может быть, вы можете предоставить вспомогательную библиотеку с устаревшей функцией в ней; люди, которые не будут обращать внимания, могут связываться с вспомогательной библиотекой, но люди в основном потоке не будут использовать вспомогательную библиотеку и, следовательно, не будут использовать функции. Тем не менее, он по-прежнему выходит за рамки «устаревшей» стадии.
Получить предупреждение о времени соединения довольно сложно. Очевидно, что GCC делает это для некоторой функции (mktemp()
и др.), И Apple предупреждает GCC, если вы запускаете программу, которая использует gets()
. Я не знаю, что они делают, чтобы это произошло.
В свете комментариев, я думаю, вам нужно решить проблему во время компиляции, а не ждать до времени ссылки или выполнения.
Атрибуты GCC включают (из руководства GCC 4.4.1):
error ("message")
Если этот атрибут используется в объявлении функции и вызов такой функции
не устранено через устранение мертвого кода или другие оптимизации, ошибка
который будет включать в себя сообщение будет диагностировано. Это полезно для времени компиляции
проверка, особенно вместе с __builtin_constant_p и встроенными функциями
где проверка аргументов встроенной функции невозможна через extern
char [(условие)? 1: -1]; трюки. Пока можно выйти из функции
undefined и, таким образом, вызывает сбой ссылки, при использовании этого атрибута проблема
будет диагностирован ранее и с точным местоположением звонка даже при наличии
встроенные функции или когда не выдается отладочная информация.
warning ("message")
Если этот атрибут используется в объявлении функции и вызов такой функции
не устраняется путем устранения мертвого кода или других оптимизаций, предупреждение
который будет включать в себя сообщение будет диагностировано. Это полезно для времени компиляции
проверка, особенно вместе с __builtin_constant_p и встроенными функциями.
Пока можно определить функцию с помощью сообщения в .gnu.warning *
раздел, при использовании этого атрибута проблема будет диагностирована ранее и
с точным местоположением вызова даже при наличии встроенных функций или когда нет
выдача отладочной информации.
Если программы конфигурации игнорируют ошибки, они просто ломаются. Это означает, что новый код не может быть скомпилирован с использованием функций, но существующий код может продолжать использовать устаревшие функции в библиотеках (до тех пор, пока он не будет перекомпилирован).