Loading [MathJax]/extensions/MathMenu.js
Mesh Oriented datABase  (version 5.5.1)
An array-based unstructured mesh library
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Compiler.hpp
Go to the documentation of this file.
1 /** \file Compiler.hpp 2  * \author Jason Kraftcheck 3  * \date 2010-12-16 4  * 5  * Provide pre-processor macros for compiler-specific features. All 6  * defined macros should expand to nothing if not supported by the 7  * compiler. 8  */ 9  10 #ifndef moab_COMPILER_HPP 11 #define moab_COMPILER_HPP 12  13 #ifdef IS_BUILDING_MB 14  15 /** Private Compiler-Specifc Pre-Processor Macros */ 16  17 /**\def __restrict__ 18  *\brief Provide functionality similar to C99 \c restrict keyword 19  * 20  * Tell the compiler that a pointer is not aliased. This means that 21  * programmer guarantees that no other pointer will be used to reference 22  * memory that is referenced through the designated pointer unless it 23  * is obivous to the compiler in the relevant function. A typical use 24  * for this is to specify that two pointer arguments to a function will 25  * never be used to reference overlapping memory. For example: 26  *\code 27  * void* memcpy(void* __restrict__ dest, const void* __restrict__ src, size_t len); 28  *\endcode 29  * Says that the memory locations indicated by the \c dest and \c src pointers 30  * will never be used to reference overlapping memory, including offsets up to 31  * \c len. 32  * 33  * Notifying the compiler about lack of pointer aliasing allows it to make 34  * better optimizations. However, the behavior is undefined (and probably 35  * broken in platform-specific ways) if designated pointers are aliased. 36  */ 37 #ifdef __cplusplus 38 #if !defined __GNUC__ || __GNUC__ < 4 || __GNUC_MINOR__ < 5 39 #define __restrict__ 40 #endif 41 #endif 42  43  44 #endif 45  46 /** Public Compiler-Specifc Pre-Processor Macros */ 47  48 /**\def PRINT_FORMAT(start) 49  *\brief Give a hint to the compiler the function is like \c printf 50  * 51  * Tell the compiler that the function involves a printf-style format 52  * string and varargs list. This gives the compiler the opportunity 53  * to warn if the argument types do not match the format string. 54  * This macro should be inluded after the complete function declaration, 55  * but before the closing semi-colon. 56  * 57  *\param START The position of the format string in the argument list, where 58  * the first argument is 1. 59  *\NOTE This macro is designed to be used with member functions of C++ classes, 60  * and therefore explicitly accounts for the implicit \c this pointer 61  * in the argument list. It will not work correctly with static or 62  * non-member functions. 63  *\NOTE This macro assumes that the arguments referenced in the format string 64  * begin immediately after the format string itself. 65  */ 66 #ifdef __GNUC__ 67 #define MB_PRINTF( START ) __attribute__( ( format( printf, ( START ) + 1, ( START ) + 2 ) ) ) 68 #else 69 #define MB_PRINTF( START ) 70 #endif 71  72 /**\def MB_DLL_EXPORT 73  *\brief Declare a function or class to be visible in shared library. 74  */ 75 /**\def MB_DLL_HIDDEN 76  *\brief Declare a function or class to be internal to a shared library. 77  */ 78 #if defined _MSC_VER || defined __CYGWIN__ || defined __MINGW32__ || defined __MINGW64__ || defined _WIN32 79 #if !defined IS_BUILDING_MB || !defined MB_EXPORTS 80 #define MB_DLL_EXPORT __dllspec( dllexport ) 81 #elif !defined MB_WIN_DLL 82 #define MB_DLL_EXPORT __dllspec( dllimport ) 83 #else 84 #define MB_DLL_EXPORT 85 #endif 86 #define MB_DLL_HIDDEN 87 #elif defined __GNUC__ && __GNUC__ > 3 88 #define MB_DLL_EXPORT __attribute__( ( visibility( "default" ) ) ) 89 #define MB_DLL_HIDDEN __attribute__( ( visibility( "hidden" ) ) ) 90 #else 91 #define MB_DLL_EXPORT 92 #define MB_DLL_HIDDEN 93 #endif 94  95 /**\def MB_DEPRECATED 96  *\brief Mark function or API as deprecated 97  */ 98 #if defined( __GNUC__ ) && ( 1000 * __GNUC__ + __GNUC_MINOR__ ) > 3000 99 #define MB_DEPRECATED __attribute__( ( __deprecated__ ) ) 100 #else 101 #define MB_DEPRECATED 102 #endif 103  104 #endif // moab_COMPILER_HPP