当前位置: 首页 > news >正文

Linux下使用宏定义判断系统架构和系统类型

文章目录

  • 查看编译器当前支持的宏定义
  • 查找指定的宏
    • 不同架构
    • 不同系统
  • 附录-编译器内部常用的一些宏定义
  • 宏定义实际应用
    • 使用宏定义判断系统架构
    • 使用宏定义判断系统类型

一般情况下在linux下做C/C++方面的开发不需要太关注系统架构,当然如果涉及到不同架构下的适配问题,就需要额外处理了。最近开发中遇到了需要在不同的系统架构下分情况处理,由于没有这方面的经验,自己去找了相关的资料,汇总整理了一些内容分享给有需要的小伙伴。

查看编译器当前支持的宏定义

在linux下使用如下命令gcc -E -dM - < /dev/null可以查看当前编译器内部所有默认的宏定义:
在这里插入图片描述

查找指定的宏

不同架构

如查找编译器是否支持x86架构相关的宏定义:
gcc -E -dM - < /dev/null| grep x86
在这里插入图片描述
查找32位arm相关的宏定义
gcc -E -dM - < /dev/null| grep __arm__
查找64位arm相关的宏定义
gcc -E -dM - < /dev/null| grep __aarch64__

不同系统

windows系统的宏定义为 _WIN32
linux系统的宏定义为 __linux__
mac系统的宏定义为 __APPLE__

附录-编译器内部常用的一些宏定义

通常,在构建时使用 #ifdef xxx最为方便:

对于 32 位 ARM平台,使用 arm
对于 64 位 ARM平台,使用 aarch64
对于 32 位 x86平台,使用 i386
对于 64 位 x86平台,使用 x86_64
请注意:32 位 X86 称为 __i386__,而不是__x86__

宏定义实际应用

使用宏定义判断系统架构

#if (defined __arm__) || (defined __aarch64__) // arm平台cout << "arm platform..." << endl;
#elif (defined __i386__) || (defined __x86_64__) // x86平台cout << "x86 platform..." << endl;
#elif defined __APPLE__  // mac平台cout << "mac platform..." << endl;
#endif

在x86平台运行结果如下:
在这里插入图片描述

使用宏定义判断系统类型

判断是否为Linux系统,可以使用__linux、__linux__、__gnu_linux__、linux宏定义,具体有哪些宏可以自行查看自己的编译器支持的宏。
使用gcc -E -dM - < /dev/null| grep linux命令可以查询:
在这里插入图片描述

#ifdef _WIN32cout << "windows..." << endl;
#elif defined __linux__cout << "linux..." << endl;
#endif

在64位linux系统上输出:
在这里插入图片描述

相关文章:

Linux下使用宏定义判断系统架构和系统类型

文章目录 查看编译器当前支持的宏定义查找指定的宏不同架构不同系统 附录-编译器内部常用的一些宏定义宏定义实际应用使用宏定义判断系统架构使用宏定义判断系统类型 一般情况下在linux下做C/C方面的开发不需要太关注系统架构&#xff0c;当然如果涉及到不同架构下的适配问题&a…...

Python---把函数的返回值作为另外一个函数的参数

def test1():return 50def test2(num):print(num)# 1. 保存函数test1的返回值 result test1()# 2.将函数返回值所在变量作为参数传递到test2函数 test2(result) # 50...

231123 刷题日报-动态规划

今天主要看了DP&#xff0c;前几天频繁遇到DP打击有点大。。 1. 0-1背包问题 要点&#xff1a; a. 三部曲&#xff1a; 1. 状态和选择 状态&#xff1a;物品序号、背包容量 选择&#xff1a;放、不放 2. dp数组定义、base case dp[i][w] 对于前i个物品&#xff0c;当前背包…...

微信小程序前端环境搭建

搭建微信小程序前端环境 申请小程序测试账号 访问路径 使用微信扫描二维码进行申请&#xff0c;申请成功之后&#xff0c;进入界面&#xff0c;获取小程序ID(AppID)和秘钥(AppSecret) 安装微信web开发者工具 访问路径 选择稳定开发的版本 需要在小程序的设置中将默认关闭…...

【Qt一坑】qt编译出现“常量中有换行符”

在qt编译过程中出现“常量中有换行符”&#xff0c;原因有以下几点&#xff08;qt版本5.14.2&#xff09;&#xff1a; 1.中文编码格式问题&#xff0c;将UTF-8编码格式改成 UTF-8 BOM。 或者使用QtCreator 进行如下设置&#xff08;找到Qt的左边列表里的项目&#xff0c;下的…...

C++每日选择题—Day1

第一题 以下C代码会输出什么? #include <iostream> using namespace std; class A { public:A() {}~A() {} private:static int a; }; int main() {cout << sizeof(A) << endl;return 0; } A&#xff1a;0 B&#xff1a;1 C&#xff1a;4 D&#xff1a;8 答…...

【实用】mysql配置 及将线上数据导入本地 问题解决及记录

[ERR] 1292 - Incorrect datetime value: ‘0000-00-0000:00:00‘ for column ‘BIRTH_DATE‘ at row 1 此问题是mysql当前配置不支持日期为空&#xff0c;或者为‘0000-00-0000:00:00‘得情况 1、直接在数据库执行 # 修改全局 set global.sql_mode ONLY_FULL_GROUP_BY,STR…...

如何下载OpenJDK及其源码

如果想下载 OpenJDK&#xff0c;存在以下几种办法&#xff1a; 最简单的办法是去 OpenJDK 官网&#xff0c;这里能下载 JDK9 及其以上的版本&#xff0c;还有 JDK 源码所在的 github 地址。 第二种方法是使用 IDEA 下载&#xff0c;位置在 File->Project Structure->SD…...

[Android]使用Retrofit进行网络请求

以下是使用 Retrofit 发送 POST 请求获取分页城市列表的 Kotlin 代码示例 1.在你的 build.gradle 文件中添加 Retrofit 和 Gson 的依赖 dependencies {......implementation("com.squareup.retrofit2:retrofit:2.9.0")implementation("com.squareup.retrofit2…...

OpenGL 绘制圆形平面(Qt)

文章目录 一、简介二、代码实现三、实现效果一、简介 这里使用一种简单的思路来生成一个圆形平面: 首先,我们需要生成一个单位圆,半径为1,法向量为(0, 0, 1),这一步我们可以使用一些函数生成圆形点集。之后,指定面片的索引生成一个圆形平面。当然这里为了后续管理起来方便…...

JAVA系列---Servlet详解

目录 背景为何会出现ServletWeb开发的本质 ServletsCGIFastCGIWSGIServlet总结 wsgi与servlet出现时间社区特点对web开发的影响 servlet详解特性主要工作执行逻辑 应用Tomcat背景embedded tomcat本质 背景 为何会出现Servlet Servlet是Server Applet 的缩写&#xff0c;译为“…...

机器人制作开源方案 | 钻孔植树一体化沙漠车

作者&#xff1a;徐邦国、张博宇、刘露、李晶晶、吕洁秀单位&#xff1a;天津职业技术师范大学 机械工程学院指导老师&#xff1a;何永利 摘要&#xff1a;本项目旨在设计一种专用于沙漠植树的植树车&#xff0c;以沙漠自动化植树为研究对象&#xff0c;提出一种创新式钻…...

OmniGraffle

安装 在mac上安装OmniGraffle&#xff0c;找一个正版或者啥的都行&#xff0c;安装好后&#xff0c;可以直接在网上找一个激活码&#xff0c;然后找到软件的许可证&#xff0c;进行添加即可。 使用 新建空白页 然后图形啥的看一眼工具栏就知道了&#xff0c;颜色形状还是挺…...

【C++上层应用】4. 多线程

文章目录 【 1. 创建线程 】【 2. 终止线程 】【 3. 实例 】【 4. 向线程传递参数 】【 5. 连接和分离线程 】 多线程 是多任务处理的一种特殊形式&#xff0c;多任务处理允许让电脑同时运行两个或两个以上的程序。一般情况下&#xff0c;两种类型的多任务处理&#xff1a;基于…...

【uni-app】uniapp中弹出输入框的示例

uni.showModal({title: 请输入企业名称,content: ,editable: true, //是否显示输入框placeholderText: 请输入企业名称, //输入框提示内容confirmText: 确认,cancelText: 取消,success: (res) > {if (res.confirm) {this.checkDesc.name res.content;// console.log(输入的…...

通过bat脚本控制Oracle服务启动停止

1、将Oracle服务全部设置为手动启动 初始安装Oracle之后服务启动状态&#xff1a; 2、服务功能介绍 3、构建服务启动/停止bat脚本 注意&#xff1a;编码选择ANSI(如果编码不是ANSI运行脚本会显示乱码) echo off :main cls echo 注&#xff1a;请保证该脚本是使用管理员权限…...

GB28181学习(十七)——基于jrtplib实现tcp被动和主动发流

前言 GB/T28181-2022实时流的传输方式介绍&#xff1a;https://blog.csdn.net/www_dong/article/details/134255185 基于jrtplib实现tcp被动和主动收流介绍&#xff1a;https://blog.csdn.net/www_dong/article/details/134451387 本文主要介绍下级平台或设备发流功能&#…...

RealSense深度相机在Ubuntu18.04的ros环境下,保存同一时刻下深度图像和彩色图像

背景&#xff1a;Ubuntu18.04 ROS Melodic 已安装配置好RealSense相关程序&#xff0c;链接D435i相机后&#xff0c;得到如下Rostopic&#xff1a; /camera/color/image_raw # 彩色图像信息 /camera/depth/image_rect_raw # 深度图像信息 于是写一个python程序&am…...

vue3 ref和reactive使用watch属性的方法和区别

在Vue 3中&#xff0c;您可以使用watch函数和watch选项来监视ref和reactive创建的响应式数据的变化。下面是它们的使用方法和区别&#xff1a; 使用方法&#xff1a; 使用ref和watch&#xff1a; import { ref, watch } from vue;const count ref(0);watch(count, (newVal,…...

YOLO目标检测——卫星遥感舰船检测数据集下载分享【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;卫星遥感舰船检测数据集说明&#xff1a;卫星遥感舰船检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富&#xff0c;含船一个类别标签说明&#xff1a;使用lableimg标注软件标注&#xff0c;标注框质量高&#xff0c;含voc(xm…...

CodeExamples深色主题实现原理:iOS 13+最佳实践

CodeExamples深色主题实现原理&#xff1a;iOS 13最佳实践 【免费下载链接】CodeExamples Code Examples 项目地址: https://gitcode.com/gh_mirrors/co/CodeExamples CodeExamples是一个专注于iOS开发的代码示例项目&#xff0c;其中深色主题功能为开发者提供了完整的i…...

互联网大厂 Java 求职者面试:从 Spring Boot 到微服务的挑战

互联网大厂 Java 求职者面试&#xff1a;从 Spring Boot 到微服务的挑战 在互联网大厂的面试中&#xff0c;技术栈的广度和深度常常是决定求职者能否成功的关键因素。本文通过一位候选人燕双非的面试经历&#xff0c;展示了在面试过程中如何应对技术问题&#xff0c;以及面试官…...

Notepad++ 开发者福音:集成Hypnos-i1-8B插件实现代码注释与逻辑解释

Notepad 开发者福音&#xff1a;集成Hypnos-i1-8B插件实现代码注释与逻辑解释 1. 引言&#xff1a;代码理解的痛点与解决方案 作为一名开发者&#xff0c;你是否经常面对这样的困境&#xff1a;接手一个遗留项目&#xff0c;面对满屏没有注释的复杂代码&#xff1b;或者自己几…...

QMCDecode终极指南:3步轻松解密QQ音乐加密格式

QMCDecode终极指南&#xff1a;3步轻松解密QQ音乐加密格式 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac&#xff0c;qmc0,qmc3转mp3, mflac,mflac0等转flac)&#xff0c;仅支持macOS&#xff0c;可自动识别到QQ音乐下载目录&#xff0c;默认转换结果…...

Pixel Couplet Gen快速上手:Colab Notebook零配置体验像素春联生成

Pixel Couplet Gen快速上手&#xff1a;Colab Notebook零配置体验像素春联生成 1. 项目介绍 Pixel Couplet Gen是一款基于ModelScope大模型驱动的创意春联生成工具。它将中国传统春节元素与复古游戏美学完美融合&#xff0c;为用户带来全新的数字节日体验。 与传统春联生成器…...

大型语言模型中的上下文工程挑战与RW-Steering解决方案

1. 大型语言模型中的上下文工程挑战在当今AI技术快速发展的背景下&#xff0c;大型语言模型(LLM)已成为信息处理和生成的核心工具。这些模型通过吸收和理解输入上下文来生成响应&#xff0c;这种能力被称为"上下文学习"(In-Context Learning, ICL)。然而&#xff0c;…...

AI对话中的隐私保护与法律合规实践

1. 项目概述&#xff1a;当AI成为对话参与者去年处理一个企业咨询案例时&#xff0c;客户突然问我&#xff1a;"如果我和AI说的话被第三方听到&#xff0c;这算泄密吗&#xff1f;"这个问题让我意识到&#xff0c;人类与AI的对话已经涉及到法律和伦理的灰色地带。当我…...

『Web安全』入门级实战教程——Web基础(一)

『Web安全』入门级实战教程——Web基础&#xff08;一&#xff09; 这是一个为开发、运维及安全从业者构建的&#xff1a; 系统的拆解Web安全的关键领域。 内容涵盖 “原理深入-实战驱动-体系构建” 为你提供一条清晰的进阶路径。 使你在面任何新型漏洞时&#xff0c;迅速定…...

从芯片选型到PCB布局:手把手教你设计基于GS12170的SDI/HDMI转换板(避坑指南)

从芯片选型到PCB布局&#xff1a;手把手教你设计基于GS12170的SDI/HDMI转换板&#xff08;避坑指南&#xff09; 在音视频设备开发领域&#xff0c;SDI与HDMI信号转换一直是专业级应用的核心需求。无论是演播室设备、医疗影像系统还是广电级监控解决方案&#xff0c;都需要稳定…...

Giga-snaP BGA适配器设计:解决高频信号与热膨胀挑战

1. Giga-snaP BGA SMT适配器设计解析在BGA封装测试领域&#xff0c;传统适配器面临三大核心挑战&#xff1a;热膨胀系数(CTE)不匹配导致的焊接失效、高密度互连带来的巨大插拔力、以及高频信号传输的完整性要求。Giga-snaP创新性地采用环氧树脂包覆成型技术&#xff0c;从根本上…...