Пометка функций из библиотеки как устаревших

Я работаю над проектом на C, который расширяет существующую библиотеку (через стандартные includes). По мере развития библиотеки ряд функций устаревает. Однако это показано только в документации; код никак не отмечает этот статус.

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

Это возможно? Кажется, что Visual Studio может сделать это с помощью

#pragma deprecated(X,Y,...)

синтаксис, но я не думаю, что gcc поддерживает это, просто

__attribute__ ((deprecated))

в самом объявлении функции.


person Charles    schedule 15.05.2014    source источник


Ответы (1)


Вытащено из рабочего проекта

#ifdef __GNUC__
#define DEPRECATED(X) X __attribute__((deprecated))
#elif defined(_MSC_VER)
#define DEPRECATED(X) __declspec(deprecated) X
#else
#define DEPRECATED(X) X
#endif

См. http://msdn.microsoft.com/en-us/library/dabb5z75.aspx и http://msdn.microsoft.com/en-us/library/044swk7y.aspx

потом

DEPRECATED(void foo(int a, int b, int c));
person Mark Nunberg    schedule 15.05.2014
comment
Вам не нужно. Вам просто нужно поместить это в объявление, а не в определение - person Mark Nunberg; 15.05.2014
comment
Он объявлен в библиотеке — я не могу повторно объявить его в своем файле. - person Charles; 15.05.2014
comment
Почему бы нет? Если вы правильно создали прототипы, они должны компилироваться нормально и без предупреждений. Чтобы проверить, я только что попробовал это как в MSVC (с /W3), так и в gcc (с -Wall -Wextra). Вы можете объявлять функции сколько угодно раз, пока они сохраняют один и тот же класс хранения и аргументы. - person Mark Nunberg; 15.05.2014
comment
Я не знал этого. Позвольте мне проверить мой проект, а затем я поставлю вам галочку. :) - person Charles; 15.05.2014