跨平台c/c++编码的预定义宏

来源:互联网 发布:js获取json第一个对象 编辑:程序博客网 时间:2024/05/21 17:48

c/c++中编写跨平台的代码时,难免需要根据不同的操作系统、编译器等准备不同的代码。

首先,不同平台中编译器预定义宏的参考资料 点击这里

其次,我本人仅关注以下平台:linux32/64-gcc, win32/64-vc, win32/64-mingw,这里给一个我自用的侦测上述平台的头文件

/** * @file - * @author jingqi * @date 2011-11-13 * @brief *   see http://sourceforge.net/p/predef/wiki/Home/ * * @last-edit 2012-03-25 18:53:32 jingqi */#ifndef ___HEADFILE___6689E00A_B262_4C15_A826_19665AF8EC32_#define ___HEADFILE___6689E00A_B262_4C15_A826_19665AF8EC32_/** 操作系统类型 */#if defined(__WINDOWS__) || defined(_WIN32) || defined(WIN32) || defined(_WIN64) || defined(WIN64) || \    defined(__WIN32__) || defined(__TOS_WIN__)#   define NUT_PLATFORM_OS_NAME "Windows"#   define NUT_PLATFORM_OS_WINDOWS#elif defined(__linux__) || defined(linux) || defined(__linux) || defined(__LINUX__) || defined(LINUX) || \    defined(_LINUX)#   define NUT_PLATFORM_OS_NAME "Linux"#   define NUT_PLATFORM_OS_LINUX#else#   define NUT_PLATFORM_OS_NAME "Unknown"#   error unknown os#endif/** 指针位数 */#if defined(_WIN64) || defined(WIN64) || defined(__amd64__) || defined(__amd64) || defined(__LP64__) || \    defined(_LP64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(__ia64__) || \    defined(_IA64) || defined(__IA64__) || defined(__ia64) || defined(_M_IA64)#   define NUT_PLATFORM_BITS_NAME "64"#   define NUT_PLATFORM_BITS_64#elif defined(_WIN32) || defined(WIN32) || defined(__32BIT__) || defined(__ILP32__) || defined(_ILP32) || \    defined(i386) || defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) || \    defined(__i386) || defined(_M_IX86) || defined(__X86__) || defined(_X86_) || defined(__I86__)#   define NUT_PLATFORM_BITS_NAME "32"#   define NUT_PLATFORM_BITS_32#else#   define NUT_PLATFORM_BITS_NAME "Unknown"#   error unknown bits#endif/** 编译器 */#if defined(_MSC_VER)#define NUT_PLATFORM_CC_NAME "VC"#define NUT_PLATFORM_CC_VC#elif defined(__MINGW32__) || defined(__MINGW64__)#define NUT_PLATFORM_CC_NAME "MINGW"#define NUT_PLATFORM_CC_MINGW#define NUT_PLATFORM_CC_GCC#elif defined(__GNUG__) || defined(__GNUC__)#define NUT_PLATFORM_CC_NAME "GCC"#define NUT_PLATFORM_CC_GCC#else#define NUT_PLATFORM_CC_NAME "Unknown"#   error unknown compiler#endif/** 模块API定义 */#if defined(NUT_PLATFORM_OS_WINDOWS)#   define DLL_API extern "C" __declspec(dllexport)#else#   define DLL_API extern "C"#endif/** 字符串 */#define NUT_PLATFORM_STR "OS: " NUT_PLATFORM_OS_NAME ", Bits: " NUT_PLATFORM_BITS_NAME ", Compiler: " NUT_PLATFORM_CC_NAME#endif /* head file guarder */

上述代码隶属于一个我自己的c++模板类库 nut ,可能博客以后列举的跨平台代码中会使用到上述宏。


原创粉丝点击