From 9bf41e06ca6ebfb45694ba350c2435c79c91effb Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 5 Jul 2003 23:56:32 +0000 Subject: [PATCH] added wxMAKE_UNIQUE_NAME to wx/defs.h, use it in wx/debug.h git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@21695 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/debug.h | 13 ++----------- include/wx/defs.h | 9 +++++++++ include/wx/dynarray.h | 3 ++- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/include/wx/debug.h b/include/wx/debug.h index 10e902d5c6..ccad73ccba 100644 --- a/include/wx/debug.h +++ b/include/wx/debug.h @@ -181,19 +181,10 @@ WXDLLIMPEXP_DATA_BASE(extern const bool) wxFalse; particular, this is why we define a struct and not an object (which would result in a warning about unused variable) and a named struct (otherwise we'd get a warning about an unnamed struct not used to define an object!). - The _n__ part is to stop VC++ 7 being confused since it encloses __LINE++ in - parentheses. Unfortunately this does not work with other compilers, so - we will only enable it when we know the _precise_ symbols to test for. */ -#define wxMAKE_ASSERT_NAME_HELPER(line) wxAssert_ ## line -#define wxMAKE_ASSERT_NAME(line) wxMAKE_ASSERT_NAME_HELPER(line) -#if 0 -#define wxMAKE_UNIQUE_ASSERT_NAME wxMAKE_ASSERT_NAME(_n___ ## __LINE__) -#else -#define wxMAKE_UNIQUE_ASSERT_NAME wxMAKE_ASSERT_NAME(__LINE__) -#endif -#define wxMAKE_UNIQUE_ASSERT_NAME2(text) wxMAKE_ASSERT_NAME(text) +#define wxMAKE_UNIQUE_ASSERT_NAME wxMAKE_UNIQUE_NAME(wxAssert_) +#define wxMAKE_UNIQUE_ASSERT_NAME2(text) wxMAKE_UNIQUE_NAME(text) /* The second argument of this macro must be a valid C++ identifier and not a diff --git a/include/wx/defs.h b/include/wx/defs.h index a95dac23ce..ce1fbb21ad 100644 --- a/include/wx/defs.h +++ b/include/wx/defs.h @@ -487,6 +487,15 @@ typedef int wxWindowID; // size of statically declared array #define WXSIZEOF(array) (sizeof(array)/sizeof(array[0])) +// helper macros to be able to define unique/anonymous objects: this works by +// appending the current line number to the given identifier to reduce the +// probability of the conflict (it may still happen if this is used in the +// headers, hence you should avoid doing it or provide unique prefixes then) +#define wxCONCAT(text, line) text ## line +#define wxCONCAT_LINE2(text, line) wxCONCAT(text, line) +#define wxCONCAT_LINE(text) wxCONCAT_LINE2(text, __LINE__) +#define wxMAKE_UNIQUE_NAME(text) wxCONCAT_LINE(text) + // symbolic constant used by all Find()-like functions returning positive // integer on success as failure indicator #define wxNOT_FOUND (-1) diff --git a/include/wx/dynarray.h b/include/wx/dynarray.h index 02bbcff0dd..50dd0b5dfb 100644 --- a/include/wx/dynarray.h +++ b/include/wx/dynarray.h @@ -593,7 +593,8 @@ WX_DECLARE_USER_EXPORTED_BASEARRAY(double, wxBaseArrayDouble, // Some commonly used predefined arrays // ---------------------------------------------------------------------------- -WX_DEFINE_USER_EXPORTED_ARRAY_SHORT (short, wxArrayShort, WXDLLIMPEXP_BASE); +WX_DEFINE_USER_EXPORTED_ARRAY_SHORT (short, wxArrayShort, + WXDLLIMPEXP_BASE); WX_DEFINE_USER_EXPORTED_ARRAY_INT (int, wxArrayInt, WXDLLIMPEXP_BASE); WX_DEFINE_USER_EXPORTED_ARRAY_LONG (long, wxArrayLong, WXDLLIMPEXP_BASE); WX_DEFINE_USER_EXPORTED_ARRAY (void *, wxArrayPtrVoid, WXDLLIMPEXP_BASE); -- 2.45.2