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位编译
}

参考链接:

相关推荐
星火开发设计2 小时前
枚举类 enum class:强类型枚举的优势
linux·开发语言·c++·学习·算法·知识
喜欢吃燃面8 小时前
Linux:环境变量
linux·开发语言·学习
爱编码的小八嘎8 小时前
C语言对话-10.关于操纵器的对话
c语言
徐徐同学8 小时前
cpolar为IT-Tools 解锁公网访问,远程开发再也不卡壳
java·开发语言·分布式
LawrenceLan8 小时前
Flutter 零基础入门(二十六):StatefulWidget 与状态更新 setState
开发语言·前端·flutter·dart
m0_748229998 小时前
Laravel8.X核心功能全解析
开发语言·数据库·php
qq_192779879 小时前
C++模块化编程指南
开发语言·c++·算法
代码村新手9 小时前
C++-String
开发语言·c++
qq_401700419 小时前
Qt 中文乱码的根源:QString::fromLocal8Bit 和 fromUtf8 区别在哪?
开发语言·qt