Перед включением файла заголовка используйте препроцессор, чтобы переименовать новый
:
#define new mynew
#include <...>
#undef new
, что позволит продолжить компиляцию.
Вам действительно нужен доступ к этой переменной? Если нет - то все готово. В этом случае необходимо убедиться, что файлы .c для библиотеки скомпилированы с использованием
-Dnew=mynew
Вы можете написать свои собственные функции-оболочки на C. Все, что вы используете, что касается библиотеки, будет написано на C с помощью файлов заголовков, удобных для C ++. Итак, вместо:
other_lib.h: int foo( int new ); my_app.cxx: extern "C" { #include <other_lib.h> }
, который не компилируется, вы выполните:
my_wrap.h: #ifdef __cplusplus extern "C" { #endif int my_foo( int ); #ifdef __cplusplus } #endif my_wrap.c: #include <other_lib.h> int my_foo( int x ) { return foo( x ); } my_app.cxx: #include "my_wrap.h" ...
Скомпилируйте my_wrap.c с помощью компилятора C, затем скомпилируйте my_app.cxx с помощью компилятора C ++. Это позволяет вам строить, не внося изменений в существующую библиотеку.
Требуется ли, чтобы заголовок содержал имя этой переменной? Если вы используете глобальную переменную с именем «новая», то, конечно, это может быть причиной того, что вам необходимо иметь глобально видимое имя переменной. С другой стороны, если это что-то вроде аргумента функции с именем «новый», просто удалите имя из объявления функции. Если имя является членом структуры или объединения, изменение его в файле заголовка не повредит коду .C, пока код .C видит «частное» определение с именем, соответствующим этому исходному коду.
Поскольку файлы .C должны быть скомпилированы в синтаксисе C и, таким образом, смогут справиться с переменной с именем "new", исправление файлов заголовков должно быть допустимым решением.
Да, в долгосрочной перспективе вам следует обратить на это внимание разработчика библиотеки.
В качестве последнего, несколько хитрого решения вы можете изменить заголовочный файл с «нового» на что-то, например, «было_новое». А при компиляции файлов C библиотеки используйте переключатели компилятора для принудительного выполнения #define new was_new
.
Если вы модифицируете отличный заголовочный файл сторонней библиотеки, я бы порекомендовал вам остановиться. Вы пытаетесь добавить код C ++ в библиотеку C, если я правильно вас понял, этого не произойдет, C не распознает ключевое слово «new», поскольку это ключевое слово C ++.
Вместо этого я бы рекомендовал следующее:
Вы создаете отдельный проект C ++ с исходным файлом (* .cpp), добавляете #include к этому стороннему заголовочному файлу и связываете (google "связывание библиотек" и т. Д.) ) двоичный файл библиотеки в ваш проект.
Надеюсь, это немного поможет, Ура