]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/cpp.h
move wxSTRINGIZE and other preprocessor helpers to wx/cpp.h to fix version.rc compilation
[wxWidgets.git] / include / wx / cpp.h
diff --git a/include/wx/cpp.h b/include/wx/cpp.h
new file mode 100644 (file)
index 0000000..37c5870
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ *  Name:        wx/cpp.h
+ *  Purpose:     Various preprocessor helpers
+ *  Author:      Vadim Zeitlin
+ *  Created:     2006-09-30
+ *  RCS-ID:      $Id$
+ *  Copyright:   (c) 2006 Vadim Zeitlin <vadim@wxwindows.org>
+ *  Licence:     wxWindows licence
+ */
+
+/* THIS IS A C FILE, DON'T USE C++ FEATURES (IN PARTICULAR COMMENTS) IN IT */
+
+#ifndef _WX_CPP_H_
+#define _WX_CPP_H_
+
+/* wxCONCAT works like preprocessor ## operator but also works with macros */
+#define wxCONCAT_HELPER(text, line) text ## line
+#define wxCONCAT(text, line)        wxCONCAT_HELPER(text, line)
+
+/* wxSTRINGIZE works as the preprocessor # operator but also works with macros */
+#define wxSTRINGIZE_HELPER(x)       #x
+#define wxSTRINGIZE(x)              wxSTRINGIZE_HELPER(x)
+
+/*
+   Helper macros for wxMAKE_UNIQUE_NAME: normally 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) but we have to do it
+   differently for VC++
+  */
+#if defined(__VISUALC__) && (__VISUALC__ >= 1300)
+    /*
+       __LINE__ handling is completely broken in VC++ when using "Edit and
+       Continue" (/ZI option) and results in preprocessor errors if we use it
+       inside the macros. Luckily VC7 has another standard macro which can be
+       used like this and is even better than __LINE__ because it is globally
+       unique.
+     */
+#   define wxCONCAT_LINE(text)         wxCONCAT(text, __COUNTER__)
+#else /* normal compilers */
+#   define wxCONCAT_LINE(text)         wxCONCAT(text, __LINE__)
+#endif
+
+/* Create a "unique" name with the given prefix */
+#define wxMAKE_UNIQUE_NAME(text)    wxCONCAT_LINE(text)
+
+#endif // _WX_CPP_H_
+