Я пытаюсь разобраться в исходном коде libspatialindex. Будучи новичком в С++, я с трудом понимаю концепцию макросов. Оболочка API библиотеки для C, sidx_api.cc, прямо или косвенно включает многочисленные заголовки два из которых, по-видимому, определяют один и тот же макрос, связанный с взаимодействием с динамической библиотекой, без «undef»:
45 #if (defined _WIN32 || defined _WIN64 || defined WIN32 || defined WIN64) && !defined __GNUC__
46 #ifdef SIDX_DLL_EXPORT
47 #define SIDX_DLL __declspec(dllexport)
48 #else
49 #define SIDX_DLL __declspec(dllimport)
50 #endif
51
52 // Nuke this annoying warning. See http://www.unknownroad.com/rtfm/VisualStudio/warningC4251.html
53 #pragma warning( disable: 4251 )
54
55 #else
56 #define SIDX_DLL
57 #endif
29 #pragma once
30
31 #ifndef SIDX_C_DLL
32 #if defined(_MSC_VER)
33 # define SIDX_C_DLL __declspec(dllexport)
34 # define SIDX_DLL __declspec(dllexport)
35 #else
36 # if defined(USE_GCC_VISIBILITY_FLAG)
37 # define SIDX_C_DLL __attribute__ ((visibility("default")))
38 # define SIDX_DLL __attribute__ ((visibility("default")))
39 # else
40 # define SIDX_C_DLL
41 # define SIDX_DLL
42 # endif
43 #endif
44 #endif
Я считаю, что переопределение макроса без undef проблематично, например, как обсуждалось здесь и здесь а>. Я что-то упустил здесь? Спасибо.
if defined
вокруг них могут остановить переопределение. На высоком уровнеdllexport
предназначен для экспорта функций для использования вне dll/так, что происходит по-разному в * nix и Windows. Как вы его строите? Для какой платформы? - person doctorlove   schedule 11.06.2019SIDX_DLL
действительно будет определено дважды, один раз как__declspec(dllimport)
и один раз как__declspec(dllexport)
. Ой! - person Blaze   schedule 11.06.2019#define
строк, в зависимости от#ifdef DIX_DLL_EXPORT
. - person Barmar   schedule 11.06.2019WIN
определен,__GNUC__
не определен,SIDX_DLL_EXPORT
не определен иSIDX_C_DLL
также не определен. - person Blaze   schedule 11.06.2019Tools.h
, а затем переопределяется вsidx_export.h
. - person Barmar   schedule 11.06.2019