Таким образом, поставщик, который мы используем предоставил библиотеку (в основном для C, с некоторыми Си ++), которая выполняет следующие действия:Есть ли способ обхода #define, представленного поставщиком?
#ifndef int64_t
#define int64_t s_int64
#endif
#ifndef int32_t
#define int32_t s_int32
#endif
#ifndef int16_t
#define int16_t s_int16
#endif
#ifndef int8_t
#define int8_t s_int8
#endif
В одном из своих заголовков глубоко внутри их библиотеки. Теперь проблема заключается в том, что когда-то их библиотека включена в простом C++ 11 кода, такие как:
#include <iostream>
#include <vendor/library.h>
int main(void)
{
std::int32_t std_i = 0;
return std_i;
}
Существует сразу ошибка компилятора (s_int32
не в std::
). Таким образом, вопрос заключается в том, чтобы не допустить, чтобы продавец исправил это, есть ли способ обойти это в нашем коде? (Кстати то, что я пытался, #include <cstdint>
до их заголовки, не повезло;.. extern "C"
обертка, не повезло установлены заголовки в /usr/include/
так без контроля за порядком включения я думаю, как хорошо ...)
Не включайте такие заголовки в свой код. Они загрязняют его. Не используйте код поставщика. –
@ DanielDaranas, а не вариант, если их библиотека должна использоваться для доступа к оборудованию! :/ – Nim
Вы * можете * использовать библиотеку БЕЗ использования заголовков. Библиотека включена компоновщиком, заголовок анализируется препроцессором; просто скопируйте заголовок, отредактируйте его, включите локальную копию. В конце концов, это C, а не Java! – vaxquis