linux, windows, mac, ios等平台GCC预编译宏判断

通过C++跨平台的预编译宏来区分不同的操作系统:Win32/Win64/Unix/Linux/MacOS 操作系统宏定义说明_WIN32_WIN64Apple__APPLE__Apple__MACH__iPhoneMacOSAndroid__unix__Linux__linux__Solaris__sunHP UX__hpuxBSDBSDFreeBSDNetBSD__NetBSD__OpenBSD请注意,宏对 GNU GCC 和 G++ 有效,并且可能因其他编译器而异。我们将通过一些基本示例,并探讨这些功能在现实生活中的使用。 阅读详情

写跨平台c/c++程序的时候,需要搞清各平台下面的预编译宏,区分各平台代码。而跨平台c/c++编程,GCC基本在各平台都可以使用。整理了一份各平台预编译宏的判断示例。

需要注意几点:

* windows32/64平台_WIN32都会被定义,而_WIN64只在64位windows上定义,因此要先判断_WIN64
* 所有的apple系统都会定义 __APPLE__,包括MacOSX和iOS
* TARGET_IPHONE_SIMULATOR 是 TARGET_OS_IPHONE 的子集,
TARGET_OS_IPHONE 是 TARGET_OS_MAC的子集。也就是说iOS模拟器上会同时定义这三个宏。因此判断的时候要先判断子集。
* 另外mac上可以用以下命令行获取GCC定义的预编译宏:
gcc -arch i386 -dM -E - < /dev/null | sort  (i386可替换为arm64等)

参考示例:
(来自 https://stackoverflow.com/questions/5919996/how-to-detect-reliably-mac-os-x-ios)

#ifdef _WIN32
   //define something for Windows (32-bit and 64-bit, this part is common)
   #ifdef _WIN64
      //define something for Windows (64-bit only)
   #else
      //define something for Windows (32-bit only)
   #endif
#elif __APPLE__
    #include "TargetConditionals.h"
    #if TARGET_IPHONE_SIMULATOR
         // iOS Simulator
    #elif TARGET_OS_IPHONE
        // iOS device
    #elif TARGET_OS_MAC
        // Other kinds of Mac OS
    #else
    #   error "Unknown Apple platform"
    #endif
#elif __ANDROID__
    // android
#elif __linux__
    // linux
#elif __unix__ // all unices not caught above
    // Unix
#elif defined(_POSIX_VERSION)
    // POSIX
#else
#   error "Unknown compiler"
#endif

RakNet跨平台部署实战指南:从Windows到移动端的全流程解析 在实时网络应用开发中,UDP协议因其低延迟特性成为游戏和实时通信的首选,但其不可靠的传输机制是核心挑战。网络库通过封装UDP,实现了可靠传输、拥塞控制和连接管理等高级功能,其原理是在应用层构建可靠性保证和有序交付机制。这类技术的核心价值在于为开发者提供了接近TCP的可靠性,同时保留了UDP的速度优势,极大地简化了实时网络编程。在实际工程中,跨平台部署是评估网络库可用性的关键环节,涉及不同操作系统和硬件架构的编译工具链适配。本指南聚焦于RakNet这一经典C++网络库,针对**Windows、Linux、ma 阅读详情

相关推荐

开发者视角:Mac的“开发效率性价比”与软硬件一体化优势

在软件开发领域,开发环境的一致性与稳定性是提升工程效率的核心基础。其原理在于通过标准化的工具链和统一的系统层,减少环境配置、依赖冲突和诡异Bug排查所带来的非必要时间损耗,从而将开发者的认知负荷降至最低。这种技术价值直接体现在团队协作效率、CI/CD流水线的可靠性以及个人心流状态的保持上,尤其适用于需要频繁切换技术栈的全栈开发、数据科学和移动端开发等场景。本文聚焦于苹果Mac设备,深入探讨其通过软硬件一体化实现的“堆栈确定性”,如何将复杂的配置问题转化为可预测的时间成本,并结合Homebrew、Docker

weixin_30357231的博客 379

GCC中常见预定义宏的使用

gcc中常见预定义宏的使用。

么刚的专栏 1万+

保姆级教程:Win10/Win11系统下ArcGIS 10.2中文版完整安装与破解(含License Manager启动失败解决方案)

本文提供Windows 10/11系统下ArcGIS 10.2中文版的完整安装与破解教程,重点解决License Manager启动失败等常见问题。从安装准备、破解文件处理到最终配置验证,详细指导用户完成每一步操作,确保软件正常运行。特别针对主机名修改、端口占用等疑难问题提供专业解决方案。

weixin_29596051的博客 546

关于VS中区分debug与release,32位与64位编译的宏定义

在vs编程中,常常涉及到32位和64位程序的编译,怎么判断当前编译是32位编译还是64位编译?如何判断 是debug下编译还是release下编译?因为之前用到,这里记录一下,省的忘了又要疯狂的google。 1.判断是debug编译还是release编译。 如果_DEBUG定义了表示是debug编译,否则是release编译。 2.判断是32位编译

1万+

「免费开源」从 OCR 识别到结构化输出:合同文本高效比对的完整解决方案!

本文将系统拆解这一解决方案的技术逻辑、实施步骤与落地价值,为企业合同管理数字化转型提供实操指南。字段提取:自动识别并提取预设的关键字段(如 “甲方”“乙方”“合同金额”“履约期限” 等),若遇到模糊表述(如 “付款时间为合同签订后 30 个工作日内”),系统可自动解析为 “履约期限:合同签订日 + 30 工作日”;预设结构化字段:根据合同类型(如采购合同、服务合同、租赁合同),定义需提取的关键字段(如 “甲方名称”“乙方名称”“合同金额”“有效期起 / 止日期”“履约地点”“违约金比例” 等);

qxsz_yyh的博客 835

WinCC与施耐德PLC的Modbus TCP通信实战指南

本文详细解析了西门子WinCC与施耐德PLC通过Modbus TCP协议实现通信的完整实战流程。内容涵盖硬件网络配置、Modbus地址映射核心规则、WinCC驱动连接建立、变量创建及高级数据访问技巧,并提供了常见故障排查思路,帮助工程师高效解决跨品牌设备通信难题。

weixin_29194693的博客 1001

使用 Visual Studio 编译 ARM64 架构程序指南

使用 Visual Studio 编译 ARM64 架构程序指南 1. Visual Studio 安装 ARM64 开发组件 首先安装 Visual Studio 2019,在安装过程中勾选 ARM64 开发组件,如下图: 如果已经安装过 Visual Studio 2019,则打开 Visual Studio Installer 单独安装 ARM64 开发组件。Visual Studio Installer 可在开始菜单中找到,位置如下: 打开后,点击 Visual Studio 2019 右侧的【

langshanglibie的专栏 1万+

Agent 操作系统:未来的 Harness 平台

在大模型技术爆发的当下,自主智能体(Agent)已经成为AI原生应用的核心载体,但当前Agent开发面临着碎片化严重、运维难度高、规模化落地难三大核心痛点,就像1970年代没有通用操作系统的裸机编程时代,开发者需要重复造轮子解决底层基础设施问题。本文将深度解析Agent操作系统(Agent OS)作为AI原生时代的底层基础设施的核心定位,以及下一代Harness平台如何将Agent OS与成熟的DevOps、CI/CD、可观测性、成本管理能力深度融合,成为AI原生应用全生命周期管理的统一平台。

软件工程实践的博客 278

ARM编译器常用的预定义宏

ARM编译器预定义了许多宏。这些宏提供有关工具链版本号和编译器选项的信息。 编译器版本 宏为:__ARMCC_VERSION;数字形式呈现;使用方法如下: rt_kprintf("Compiler Version: %u\r\n", __ARMCC_VERSION); 优化等级 宏为:__OPTIMISE_LEVEL;数字形式呈现;使用方法如下: rt_kprintf("Compiler optimization level: %u\r\n", __OPTIMISE_LEVEL); 软件编译日.

caihaitao2000的博客 5569

重磅!AI实时读取总结微信聊天记录,附MCP协议+智能体配置教程!

【摘要】本文介绍了一套AI实时分析微信聊天记录的解决方案,通过Chatlog+Trae+MCP协议实现智能整理群聊信息。Chatlog作为开源工具本地解析微信数据,确保隐私安全;Trae提供AI分析能力,支持自然语言处理。操作步骤包括:1)下载运行Chatlog并启动HTTP服务;2)安装Trae配置MCP协议;3)创建智能体设置提示词。该方案虽需初始配置,但能有效解决群聊信息过载问题,自动提炼关键内容,避免有价值信息被淹没。文中提供了详细教程链接和网盘资源。

puyihuan的博客 1万+

brpc组件bvar源码解析(一)简介、使用和类的关系

bvar是brpc中的一个重要组件,brpc内部有很多builtin监控都是bvar实现的。 brpc文档介绍bvar“几乎不会给程序增加性能开销,也快于竞争频繁的原子操作”。它的原理是:多线程累加一个计数器时,每个线程只累加私有的变量而不参与全局竞争,因此写时没有锁的竞争;在读取时累加所有线程的私有变量。虽然读比之前慢多了,但写就快多了,因此它使用写多读少的场景,例如统计、监控场景。 1.使用 // bvar::Adder<T>用于累加,下面定义了一个统计read error总数的Adder。

华秋实的专栏 1851

windows linux 宏,linux, windows, mac, ios等平台GCC预编译宏判断

写跨平台c/c++程序的时候,需要搞清各平台下面的预编译宏,区分各平台代码。而跨平台c/c++编程,GCC基本在各平台都可以使用。整理了一份各平台预编译宏的判断示例。需要注意几点:* windows32/64平台_WIN32都会被定义,而_WIN64只在64位windows上定义,因此要先判断_WIN64* 所有的apple系统都会定义 __APPLE__,包括MacOSX和iOS* TARGET...

weixin_39969298的博客 612

Qt Location实战:5分钟搞定地图插件切换与卫星图源加载(附完整代码)

本文是Qt Location开发系列教程的实战指南,详细讲解如何在Qt应用中快速实现地图插件(如Esri、OSM、MapboxGL)的动态切换与卫星图源的加载。通过清晰的代码示例,帮助开发者理解插件机制,解决常见配置问题,并在5分钟内构建出具备交互式地图切换功能的应用程序。

kafka6courier的博客 524

从预定义宏区分编译环境

C标准没有定义用来识别操作系统的宏,只能检测各个编译器自带的宏定义 要做跨平台编译,gcc跨Linux/Windows/Mac平台,所以这里只说gcc编译器下怎么区分操作系统 可以用以下命令行获取GCC定义的预编译宏: $ < /dev/null gcc - -march=i386 -dM -E < /dev/null | sort (i386可替换为arm64等) $ gcc...

chenxizhan1995的博客 1554

STM32面试知识点总结分析

通过Boot引脚设定,寻找初始地址初始化栈指针 __initial_sp指向复位程序 Reset_Hander设置异常中断 HardFault_Handler设置系统时钟 SystemInit调用C库函数 _main。

嵌入式技术开发 2513

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

c++跨平台编译宏区分的两种办法

跨平台编译宏的两种方式

Hunter_pcx的博客 888

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

gcc跨平台编译

在OSX下编译报找不到malloc.h,经过查询是头文件位置不兼容,于是搜索资料,看如何通过宏来兼容不同平台。在OSX下可以通过 gcc -arch i386 -dM -E - < /dev/null | sort 查看gcc定义的预编译宏。可以添加如下代码进行兼容#ifdef _WIN32 //define something for Windows (32-bit and 64-bit,

叶玄青的博客 3299

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Unity原生插件跨平台构建实战:CMake配置与自动化部署指南

在游戏开发与移动应用开发中,原生插件(Native Plugins)是实现高性能计算、硬件访问和第三方SDK集成的关键技术。其核心原理是通过平台调用(P/Invoke)机制,让托管代码(如C#)能够调用由C/C++等非托管语言编译的本地库。这项技术的价值在于突破托管环境的性能限制,直接操作底层系统资源,广泛应用于AR/VR、音视频处理、物理模拟等对性能要求苛刻的场景。然而,跨平台构建是其中的核心挑战,不同操作系统和硬件架构(如Android的armeabi-v7a/arm64-v8a、iOS的ARM、Win

weixin_33835103的博客 326

GmSSL跨平台部署全攻略:从源码编译到移动端集成的实践指南

密码学库是现代应用安全通信与数据保护的基石,其核心原理在于通过加密算法、哈希函数和数字签名等技术,确保数据的机密性、完整性与身份认证。在国密算法(SM2/SM3/SM4)日益普及的背景下,选择并正确部署一个可靠的开源密码库成为众多开发项目的关键技术需求。GmSSL作为支持国密算法的开源密码库,为开发者提供了符合国家标准的密码学工具,其技术价值在于实现了与国际主流算法(如RSA/AES)的兼容与替代,并针对国密算法进行了深度优化。在实际工程中,密码库的部署常涉及服务端、桌面端及移动端(Android/iOS)

weixin_30824599的博客 424

Steam Audio跨平台部署实战:从PC到移动端的完整指南

空间音频技术通过模拟声音在三维空间中的传播、反射和混响,为游戏和VR应用创造沉浸式听觉体验。其核心原理基于声学物理建模和实时射线追踪计算,能够根据虚拟环境的几何材质动态生成逼真的音频反馈。这项技术的工程价值在于提升用户体验的真实感和方向感知能力,广泛应用于3A游戏、虚拟现实、模拟训练等对音频保真度要求高的场景。在跨平台部署实践中,开发者常遇到编译工具链适配、运行时库依赖管理、移动端性能优化等挑战。本指南针对Steam Audio这一开源空间音频SDK,系统梳理了其在Windows、Linux、macOS、A

weixin_30938149的博客 319

C++跨平台编译实战:三步构建健壮的跨平台构建体系

跨平台编译是现代软件开发中的核心挑战,尤其在C++这类贴近系统底层的语言中尤为突出。其原理在于不同操作系统、编译器及硬件架构在API、ABI(应用程序二进制接口)和工具链上存在固有差异,直接影响了代码的可移植性。掌握跨平台编译技术对于构建高性能、可维护的工业级软件具有重要价值,它能确保同一套代码库能在Windows、Linux、macOS乃至嵌入式等多种环境下无缝构建与运行,广泛应用于服务端、游戏引擎、云原生及高性能计算等领域。本文聚焦于C++,通过系统的方法论,教你如何搭建一套健壮的跨平台构建体系,有效应

weixin_34341117的博客 399

MediaPipe 五平台部署实操:从克隆仓库到跑通首帧的 30 分钟路径

Demo 在 Mac 上跑通了,Android 构建却在 NDK 环节直接报错;产品同学催着两天内要一个"实时手势"演示。从零开始 MediaPipe 部署,你大概率会踩到这几个坑。 ## 先划清能力边界:哪些方案能在哪些平台跑 MediaPipe 解决的问题很聚焦:把人脸、手势、姿态、分割这类视觉模型,用一套图(graph)配置在 Android、iOS、C++、Python、JS、Cora

gitblog_00214的博客 383
上一篇: win10 系统下获取系统版本号为6.2的问题
下一篇: centos 6.6 安装 gcc 4.9.1(通过devtoolset)
Maybe______
博客等级 码龄10年 26粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值