Насколько я знаю, __declspec(...)
является расширением Microsoft и в любом случае не является кроссплатформенным.
Вы можете использовать макросы для управления этим
#ifdef _MSC_VER
#define DEPRECATED __declspec(deprecated)
#else
#define DEPRECATED
#endif
DEPRECATED void someDeprecatedFunction()
Существует также [[deprecated("because")]]
начиная с C ++ 14.
Чтобы отключить его только для модульных тестов, вы можете сделать что-то вроде
#ifndef SUPPRESS_DEPRECATE_FUNCTIONS
#define DEPRECATED __declspec(deprecated)
#else
#define DEPRECATED
#endif
, а затем #define SUPPRESS_DEPRECATE_FUNCTIONS
в своем модульном тесте или скомпилировать с помощью -DSUPPRESS_DEPRECATE_FUNCTIONS
.Или вы можете создать специальный заголовок в своих модульных тестах, который #pragma
подавляет предупреждение.Что-то вроде
#if defined( __GNUC__ ) && !defined( __INTEL_COMPILER ) && ( __GNUC__ > 3 || ( __GNUC__ == 3 && __GNUC_MINOR__ >= 1 ) )
#pragma for gcc
#elif defined( _MSC_VER )
#pragma for msvc
#else
// nothing
#endif
#include "your_library_header.h"
В модульных тестах этот заголовок включается только перед любыми другими заголовками вашей библиотеки.