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

参考链接:

相关推荐
天之涯上上4 分钟前
JAVA开发 在 Spring Boot 中集成 Swagger
java·开发语言·spring boot
2402_857583495 分钟前
“协同过滤技术实战”:网上书城系统的设计与实现
java·开发语言·vue.js·科技·mfc
爱学习的白杨树11 分钟前
MyBatis的一级、二级缓存
java·开发语言·spring
OTWOL17 分钟前
两道数组有关的OJ练习题
c语言·开发语言·数据结构·c++·算法
问道飞鱼20 分钟前
【前端知识】强大的js动画组件anime.js
开发语言·前端·javascript·anime.js
拓端研究室21 分钟前
R基于贝叶斯加法回归树BART、MCMC的DLNM分布滞后非线性模型分析母婴PM2.5暴露与出生体重数据及GAM模型对比、关键窗口识别
android·开发语言·kotlin
Code成立22 分钟前
《Java核心技术I》Swing的网格包布局
java·开发语言·swing
Auc2426 分钟前
使用scrapy框架爬取微博热搜榜
开发语言·python
QQ同步助手33 分钟前
C++ 指针进阶:动态内存与复杂应用
开发语言·c++
凯子坚持 c39 分钟前
仓颉编程语言深入教程:基础概念和数据类型
开发语言·华为