Files
2026-08-29 01:50:50 +08:00

146 lines
4.9 KiB
C

#ifndef INCLUDED_C_PLATFORM_H
#define INCLUDED_C_PLATFORM_H
#ifndef INCLUDED_C_CONFIG_H
#include <c_Config.h>
#endif /*INCLUDED_C_CONFIG_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
/* ------------------------------------------------------------------------------------------------------------------ */
/* */
#if (C_SIZEOF_VOID_P==8)
#define C_PLATFORM_IS_64BIT
#elif (C_SIZEOF_VOID_P==4)
#define C_PLATFORM_IS_32BIT
#endif
#endif /*INCLUDED_C_PLATFORM_H*/