1 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 2 /** 3 * Contains preprocessor stuff. This should be the first included header. 4 * \file IcePreprocessor.h 5 * \author Pierre Terdiman 6 * \date April, 4, 2000 7 */ 8 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 9 10 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 11 // Include Guard 12 #ifndef __ICEPREPROCESSOR_H__ 13 #define __ICEPREPROCESSOR_H__ 14 15 // Check platform 16 #if defined( _WIN32 ) || defined( WIN32 ) 17 // #pragma message("Compiling on Windows...") 18 #define PLATFORM_WINDOWS 19 #else 20 // don't issue pragmas on unknown platforms 21 // #pragma message("Compiling on unknown platform...") 22 #endif 23 24 // Check compiler 25 #if defined(_MSC_VER) 26 // #pragma message("Compiling with VC++...") 27 #define COMPILER_VISUAL_CPP 28 #else 29 // don't issue pragmas on unknown platforms 30 // #pragma message("Compiling with unknown compiler...") 31 #endif 32 33 // Check compiler options. If this file is included in user-apps, this 34 // shouldn't be needed, so that they can use what they like best. 35 #ifndef ICE_DONT_CHECK_COMPILER_OPTIONS 36 #ifdef COMPILER_VISUAL_CPP 37 #if defined(_CHAR_UNSIGNED) 38 #endif 39 40 #if defined(_CPPRTTI) 41 #error Please disable RTTI... 42 #endif 43 44 #if defined(_CPPUNWIND) 45 #error Please disable exceptions... 46 #endif 47 48 #if defined(_MT) 49 // Multithreading 50 #endif 51 #endif 52 #endif 53 54 // Check debug mode 55 #ifdef DEBUG // May be defined instead of _DEBUG. Let's fix it. 56 #ifndef _DEBUG 57 #define _DEBUG 58 #endif 59 #endif 60 61 #ifdef _DEBUG 62 // Here you may define items for debug builds 63 #endif 64 65 #ifndef THIS_FILE 66 #define THIS_FILE __FILE__ 67 #endif 68 69 #ifndef ICE_NO_DLL 70 #ifdef ICECORE_EXPORTS 71 #define ICECORE_API __declspec(dllexport) 72 #else 73 #define ICECORE_API __declspec(dllimport) 74 #endif 75 #else 76 #define ICECORE_API 77 #endif 78 79 // Don't override new/delete 80 // #define DEFAULT_NEWDELETE 81 #define DONT_TRACK_MEMORY_LEAKS 82 83 #define FUNCTION extern "C" 84 85 // Cosmetic stuff [mainly useful with multiple inheritance] 86 #define override(base_class) virtual 87 88 // Our own inline keyword, so that: 89 // - we can switch to __forceinline to check it's really better or not 90 // - we can remove __forceinline if the compiler doesn't support it 91 // #define inline_ __forceinline 92 // #define inline_ inline 93 94 // Contributed by Bruce Mitchener 95 #if defined(COMPILER_VISUAL_CPP) 96 #define inline_ __forceinline 97 // #define inline_ inline 98 #elif defined(__GNUC__) && __GNUC__ < 3 99 #define inline_ inline 100 #elif defined(__GNUC__) 101 #define inline_ inline __attribute__ ((always_inline)) 102 #else 103 #define inline_ inline 104 #endif 105 106 // Down the hatch 107 #ifdef _MSC_VER 108 #pragma inline_depth( 255 ) 109 #endif 110 111 #ifdef COMPILER_VISUAL_CPP 112 #pragma intrinsic(memcmp) 113 #pragma intrinsic(memcpy) 114 #pragma intrinsic(memset) 115 #pragma intrinsic(strcat) 116 #pragma intrinsic(strcmp) 117 #pragma intrinsic(strcpy) 118 #pragma intrinsic(strlen) 119 #pragma intrinsic(abs) 120 #pragma intrinsic(labs) 121 #endif 122 123 // ANSI compliance 124 #ifdef _DEBUG 125 // Remove painful warning in debug __False__()126 inline_ bool __False__(){ return false; } 127 #define for if(__False__()){} else for 128 #else 129 #define for if(0){} else for 130 #endif 131 132 #endif // __ICEPREPROCESSOR_H__ 133