#define verboten_api(a1, a2, a3) you may not use this verboten API
Убедитесь, что они должны использовать заголовок, содержащий verboten API.
GNU предоставляет атрибут «устарел».Из руководства GCC 4.6.1:
deprecated
deprecated (msg)
Устаревший атрибут выдает предупреждение, если функция используется где-либо в исходном файле.Это полезно при определении функций, которые, как ожидается, будут удалены в будущей версии программы.Предупреждение также содержит расположение объявления устаревшей функции, чтобы пользователи могли легко найти дополнительную информацию о том, почему функция устарела или что они должны делать вместо этого.Обратите внимание, что предупреждения появляются только для случаев использования:
int old_fn () __attribute__ ((deprecated));
int old_fn ();
int (*fn_ptr)() = old_fn;
приводит к появлению предупреждения в строке 3, но не в строке 2. Необязательный аргумент msg, который должен быть строкой, будет напечатан в предупреждении, если он присутствует.Устаревший атрибут также можно использовать для переменных и типов (см. Раздел 6.36 [Атрибуты переменных], стр. 341, см. Раздел 6.37 [Типы атрибутов], стр. 350).
Обратите внимание, что GCC предоставляет параметры дляотказаться от компиляции кода с использованием устаревших функций.
Это проверки во время компиляции, а не проверки во время выполнения.Они, вероятно, также навязчивы, если только вы не хотите взломать используемые системные заголовки.Кроме того, если конкуренты не используют системный заголовок, они могут сойтись с ним.
Подумайте о создании статической библиотеки, связанной с их кодом, который определяет функции, которые запрещены, но реализациюкаждая функция - это утверждение, которое всегда будет ошибаться:
int verboten_api(int x, int y, char *z)
{
assert("function verboten_api() called" == 0);
return -1;
}
Свяжите тестовые программы с этой библиотекой.