C判断操作系统、编译器类型、编译器版本及编译位数

1. 操作系统

c 复制代码
#ifdef __linux__
    // Linux 
#elif defined(_WIN32) || defined(_WIN64)
    // Windows 
#else
    // 其他 
#endif

2. 编译器类型及版本

c 复制代码
#ifdef __GNUC__
    // 使用了GCC编译器
    #if __GNUC__ >= 7
        // GCC版本大于等于7
    #else
        // GCC版本小于7
    #endif
#elif defined(_MSC_VER)
    // 使用了MSVC编译器
    #if _MSC_VER >= 1920
        // MSVC版本大于等于2019(版本号1920对应于MSVC 2019)
    #else
        // MSVC版本小于2019
    #endif
#else
    // 其他编译器
#endif
c 复制代码
//GCC编译器
#ifdef __GNUC__
#if __GNUC__ >= 3 // GCC3.0以上

//MSVC编译器
#ifdef _MSC_VER
#if _MSC_VER >=1000 // VC++4.0以上
#if _MSC_VER >=1100 // VC++5.0以上
#if _MSC_VER >=1200 // VC++6.0以上
#if _MSC_VER >=1300 // VC2003以上
#if _MSC_VER >=1400 // VC2005以上
#if _MSC_VER >=1500 // VC2008以上
#if _MSC_VER >=1600 // VC2010以上
#if _MSC_VER >=1700 // VC2012以上
#if _MSC_VER >=1800 // VC2013以上
#if _MSC_VER >=1900 // VC2015以上

//Borland C++
#ifdef __BORLANDC__

//Cygwin
#ifdef __CYGWIN__
#ifdef __CYGWIN32__

//mingw
#ifdef __MINGW32__

//windows
#ifdef _WIN32    //32bit
#ifdef _WIN64    //64bit
#ifdef _WINDOWS     //图形界面程序
#ifdef _CONSOLE     //控制台程序
//Windows(95/98/Me/NT/2000/XP/Vista)和Windows CE都定义了
#if (WINVER >= 0x030a)     // Windows 3.1以上
#if (WINVER >= 0x0400)     // Windows 95/NT4.0以上
#if (WINVER >= 0x0410)     // Windows 98以上
#if (WINVER >= 0x0500)     // Windows Me/2000以上
#if (WINVER >= 0x0501)     // Windows XP以上
#if (WINVER >= 0x0600)     // Windows Vista以上
//_WIN32_WINNT 内核版本
#if (_WIN32_WINNT >= 0x0500) // Windows 2000以上
#if (_WIN32_WINNT >= 0x0501) // Windows XP以上
#if (_WIN32_WINNT >= 0x0600) // Windows Vista以上

3. 编译位数

使用sizeof操作符来检测指针的大小。在64位编译中,指针的大小通常为8字节,而在32位编译中通常为4字节。

c 复制代码
if (sizeof(void*) == 8) {
    // 64位编译
} else {
    // 32位编译
}

参考链接:

相关推荐
牛奔3 分钟前
mise 管理多版本 Go 项目
开发语言·前端·chrome·后端·golang
波力海苔夹心脆67517 分钟前
C# 视觉检测实战:PLC 按钮触发 VisionPro 检测,OK 亮灯 / NG 灭灯(西门子 PLC,含界面显示与图片存档)
开发语言·经验分享·c#·自动化·视觉检测·.net
2601_9628857229 分钟前
如何用 Python 计算 BBI 多空指标?
开发语言·python
老王爱玩车1 小时前
动态内存管理
c语言·开发语言·学习·面试
I'm Jie1 小时前
【开源】7 天,我用 Rust 复刻了 FinalShell!Rhost v1.0.0 发布
开发语言·rust·开源
kimnoic1 小时前
Python常用命令提示符使用方法详解
开发语言·python
Crazy________1 小时前
05Linux内存管理核心原理与运维实战
java·开发语言
Logic1011 小时前
C语言/数据结构数位DP题解:平滑排列数字统计——区间内相邻位差不超过K的数字个数
c语言·数据结构·动态规划·时间复杂度·数位dp·算法题·前导零处理
Nebula_g1 小时前
JavaSE拓展:工具类Executors
java·开发语言·后端·spring·基础·javase
扶风ff1 小时前
练题簿在线免费刷题:会员线下组卷、Word 试卷与成绩导入,课堂检测更方便
java·开发语言·算法·小程序·word