Revamp documentation.
[bertos.git] / compiler.h
index b7c78f11d59016eb973994a928890027d53db719..40266bd03ffc60321e0937563757d240c2875fbd 100755 (executable)
 
 /*#*
  *#* $Log$
+ *#* Revision 1.26  2004/10/19 08:55:14  bernie
+ *#* UNUSED_FUNC: New function attribute.
+ *#*
+ *#* Revision 1.25  2004/10/19 07:14:20  bernie
+ *#* Add macros to test for specific compiler features.
+ *#*
+ *#* Revision 1.24  2004/10/03 18:35:13  bernie
+ *#* Poison C++ keywords in C programs for better portability.
+ *#*
  *#* Revision 1.23  2004/09/20 03:30:27  bernie
  *#* Remove vsprintf_P() proto, no longer needed with avr-libc 1.0.4.
  *#*
 
 #elif defined(__GNUC__)
 
+       /* Compiler features */
+       #define COMPILER_VARIADIC_MACROS 1 /* Even in C++ */
+       #define COMPILER_TYPEOF 1
+       #define COMPILER_STAEMENT_EXPRESSIONS 1
+
        /* GCC attributes */
        #define FORMAT(type,fmt,first)  __attribute__((__format__(type, fmt, first)))
        #define NORETURN                __attribute__((__noreturn__))
        #define UNLIKELY(x)             __builtin_expect(!!(x), 0)
        #define PURE_FUNC               __attribute__((pure))
        #define CONST_FUNC              __attribute__((const))
+       #define UNUSED_FUNC             __attribute__((unused))
        #define RESTRICT                __restrict__
        #define MUST_CHECK              __attribute__((warn_unused_result))
        #if GNUC_PREREQ(3,1)
 
        #endif
 
+       #ifndef __cplusplus
+               /*
+                * Disallow some C++ keywords as identifiers in C programs,
+                * for improved portability.
+                */
+               #pragma GCC poison new delete class template typename
+               #pragma GCC poison private protected public operator
+               #pragma GCC poison friend mutable using namespace
+               #pragma GCC poison cin cout cerr clog
+       #endif
+
 #elif defined(__MWERKS__) && CPU_DSP56K
 
+       /* Compiler features */
+       #define COMPILER_TYPEOF 1
+       #define COMPILER_STAEMENT_EXPRESSIONS 1
+
        #include <stdint.h>
        #include <stddef.h>
        #include <stdbool.h>
 #endif
 
 
+/* Defaults for compiler extensions. */
+
+/*!
+ * \def COMPILER_VARIADIC_MACROS
+ * Support for macros with variable arguments.
+ */
+#ifndef COMPILER_HAVE_VARIADIC_MACROS
+#define COMPILER_HAVE_VARIADIC_MACROS (COMPILER_C99 != 0)
+#endif
+
+/*!
+ * \def COMPILER_TYPEOF
+ * Support for macros with variable arguments.
+ */
+#ifndef COMPILER_TYPEOF
+#define COMPILER_TYPEOF 0
+#endif
+
+/*!
+ * \def COMPILER_STATEMENT_EXPRESSIONS
+ * Support for macros with variable arguments.
+ */
+#ifndef COMPILER_STATEMENT_EXPRESSIONS 0
+#define COMPILER_STATEMENT_EXPRESSIONS 0
+#endif
+
 /* A few defaults for missing compiler features. */
 #ifndef INLINE
 #define INLINE                 static inline
 #ifndef CONST_FUNC
 #define CONST_FUNC             /* nothing */
 #endif
+#ifndef UNUSED_FUNC
+#define UNUSED_FUNC            /* nothing */
+#endif
 #ifndef RESTRICT
 #define RESTRICT               /* nothing */
 #endif