#ifndef INCLUDED_C_PLATFORM_H #define INCLUDED_C_PLATFORM_H /* ============================================================================== * 🎯 1. 编译器类型常量(严格以 C_ 开头) * ============================================================================== */ #define C_COMPILER_TYPE_UNKNOWN 0 #define C_COMPILER_TYPE_GCC 1 #define C_COMPILER_TYPE_CLANG 2 #define C_COMPILER_TYPE_MSVC 3 /* 初始化默认值 */ #define C_CURRENT_COMPILER_TYPE C_COMPILER_TYPE_UNKNOWN #define C_CURRENT_COMPILER_NAME "Unknown Compiler" #define C_CURRENT_COMPILER_VERSION 0 /* 核心阻断:Clang 具有欺骗性(会同时定义 __GNUC__ 或 _MSC_VER),必须优先判定 */ #if defined(__clang__) #undef C_CURRENT_COMPILER_TYPE #undef C_CURRENT_COMPILER_NAME #define C_CURRENT_COMPILER_TYPE C_COMPILER_TYPE_CLANG #define C_CURRENT_COMPILER_NAME "Clang" #undef C_CURRENT_COMPILER_VERSION #define C_CURRENT_COMPILER_VERSION (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) #elif defined(__GNUC__) || defined(__GNUG__) #undef C_CURRENT_COMPILER_TYPE #undef C_CURRENT_COMPILER_NAME #define C_CURRENT_COMPILER_TYPE C_COMPILER_TYPE_GCC #define C_CURRENT_COMPILER_NAME "GCC" #undef C_CURRENT_COMPILER_VERSION #if defined(__GNUC_PATCHLEVEL__) #define C_CURRENT_COMPILER_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) #else #define C_CURRENT_COMPILER_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100) #endif #elif defined(_MSC_VER) #undef C_CURRENT_COMPILER_TYPE #undef C_CURRENT_COMPILER_NAME #define C_CURRENT_COMPILER_TYPE C_COMPILER_TYPE_MSVC #define C_CURRENT_COMPILER_NAME "Microsoft Visual C++" #undef C_CURRENT_COMPILER_VERSION #if defined(_MSC_FULL_VER) #define C_CURRENT_COMPILER_VERSION (_MSC_FULL_VER / 1000) #else #define C_CURRENT_COMPILER_VERSION (_MSC_VER * 100) #endif #endif /* ============================================================================== * 🎯 2. 快捷判定辅助宏(严格以 C_ 开头,0 或 1 显式映射) * ============================================================================== */ #if C_CURRENT_COMPILER_TYPE == C_COMPILER_TYPE_GCC #define C_IS_COMPILER_GCC 1 #else #define C_IS_COMPILER_GCC 0 #endif #if C_CURRENT_COMPILER_TYPE == C_COMPILER_TYPE_CLANG #define C_IS_COMPILER_CLANG 1 #else #define C_IS_COMPILER_CLANG 0 #endif #if C_CURRENT_COMPILER_TYPE == C_COMPILER_TYPE_MSVC #define C_IS_COMPILER_MSVC 1 #else #define C_IS_COMPILER_MSVC 0 #endif /* ============================================================================== * 🎯 3. 操作系统环境识别矩阵(严格以 C_ 开头,无缝对接跨平台需求) * ============================================================================== */ #define C_OS_TYPE_UNKNOWN 0 #define C_OS_TYPE_WINDOWS 1 #define C_OS_TYPE_LINUX 2 #define C_OS_TYPE_MACOS 3 #define C_OS_TYPE_FREEBSD 4 #define C_CURRENT_OS_TYPE C_OS_TYPE_UNKNOWN #define C_CURRENT_OS_NAME "Unknown OS" #if defined(_WIN32) || defined(_WIN64) || defined(__CYGWIN__) #undef C_CURRENT_OS_TYPE #undef C_CURRENT_OS_NAME #define C_CURRENT_OS_TYPE C_OS_TYPE_WINDOWS #define C_CURRENT_OS_NAME "Windows" #elif defined(__APPLE__) && defined(__MACH__) #undef C_CURRENT_OS_TYPE #undef C_CURRENT_OS_NAME #define C_CURRENT_OS_TYPE C_OS_TYPE_MACOS #define C_CURRENT_OS_NAME "macOS" #elif defined(__linux__) || defined(__linux) #undef C_CURRENT_OS_TYPE #undef C_CURRENT_OS_NAME #define C_CURRENT_OS_TYPE C_OS_TYPE_LINUX #define C_CURRENT_OS_NAME "Linux" #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) #undef C_CURRENT_OS_TYPE #undef C_CURRENT_OS_NAME #define C_CURRENT_OS_TYPE C_OS_TYPE_FREEBSD #define C_CURRENT_OS_NAME "FreeBSD" #endif /* 操作系统快捷判定 */ #define C_IS_OS_WINDOWS (C_CURRENT_OS_TYPE == C_OS_TYPE_WINDOWS) #define C_IS_OS_LINUX (C_CURRENT_OS_TYPE == C_OS_TYPE_LINUX) #define C_IS_OS_MACOS (C_CURRENT_OS_TYPE == C_OS_TYPE_MACOS) #define C_IS_OS_FREEBSD (C_CURRENT_OS_TYPE == C_OS_TYPE_FREEBSD) /* ============================================================================== * 🎯 4. 特化环境:MinGW / MSYS2 环境检测(严格以 C_ 开头) * ============================================================================== */ #if defined(__MINGW32__) || defined(__MINGW64__) #define C_ENVIRONMENT_IS_MINGW 1 #else #define C_ENVIRONMENT_IS_MINGW 0 #endif #endif /*INCLUDED_C_PLATFORM_H*/