C++语言为什么跨平台?

2023-05-16




现在主流的手机平台很多,比如:Windows开发的Windows Phone(WP-"X"),

Apple(苹果公司)开发的ios,Google(谷歌)开发的android,等等!

而这些操作系统平台的语言支持大同小异;

1、Windows Phone上支持VB,C#,C,C++;

2、iOS上支持Object-c,C,C++;

3、android上支持java,C,C++;

既然如此,我们要想开发一款应用,而且兼容主流平台都能应用,而且不想写太多的代码,我们如何选择开发语言呢?答案是:我们可以选择C++语言。


C++语言是如何跨平台的?

     1、首先说一下,C#,java也跨平台,它们是怎样跨平台的?

C#,java跨平台,指的是,经过“编译系统” 编译,生成中间文件“字节码”,这样的字节码经过不同平台“解释器”再解释一次,就变成了适应各个平台的“机器码”。


     2、而C++语言,源代码是直接经过编译器编译成“操作系统”可以执行的“机器码”,

      那么它是怎么跨平台的呢?因为支持C++语言的各个平台的架构不同(比如CPU能够处理的指令集不一样),所以一份C++源代码要想在另一个操作系统平台上执行,就必须用该平台相对应的C++代码编译器对C++源代码重新进行编译,生成该平台可以直接执行的机器代码。

  它的执行过程是:预处理->编译->汇编->链接->机器码


       3、我一直以为:汇编指令是字节码,而不是二进制文件,实际上错了,字节码也是二进制文件,只不过它与具体的机器码不同,具体的机器码是与具体的运行设备有关的,而汇编指令是与具体的硬件环境无关的。


      所以说java,C#跨平台是建立在“虚拟机”的基础上的,通过虚拟机,将字节码 通过“解释器”,解释成 机器码。(java的虚拟机,C#的.net运行时环境)。所以也有的人说java,C#是解释性语言,而C、C++是编译性语言。


java,C#的跨平台受到"虚拟机"的限制,如:

1、.net环境只能在windows下有,Linux(Android),和Unix(ios)都不支持;

2、java虚拟机平台主要是Android支持,Windows(WP)和Mac(ios)都不支持;

3、.net环境、java虚拟机 在windows上默认是没有安装的。

4、java虚拟机可以配置在mac,windows(PC操作系统)上,但是不能配置在WP,IOS(移动操作系统)上,只能配置在android(移动操作系统)。


由于C/C++不受虚拟机限制,一份同样的源程序,只需要在每个不同的平台重新编译一次,就可以在各种平台上运行应用程序。而java则是编译一次,然后放到不同平台的java虚拟机上运行!


因为java最后是解释执行的,C,C++不需要解释执行,所以C++的执行速度更快一些!


总结一下:

    1、C++跨平台是一份源代码,在不同的平台上编译;

    2、java跨平台是一份源代码,编译后生成中间字节码,然后通过 不同平台的java虚拟机来解释执行的。


































本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++语言为什么跨平台? 的相关文章

  • 需求中如何画用例图

    UML用例图 用例图主要用来图示化系统的主事件流程 xff0c 它主要用来描述客户的需求 xff0c 即用户希望系统具备的完成一定功能的动作 xff0c 通俗地理解用例就是软件的功能模块 xff0c 所以是设计系统分析阶段的起点 xff0c
  • 反光板导航SLAM(二)VEnus代码浅析

    上一章简单介绍了VEnus中几个主要函数的作用 xff0c 这里详细展开看一下每个函数的具体思路 xff0c 通过研究具体的代码我们可以简单了解VEnus中对于反光柱定位的具体流程 1 IntensityExtraction Extract
  • TEB算法详解(TebLocalPlannerROS::computeVelocityCommands(3))

    第一章主要分析了teb算法的准备条件 xff0c 包括获取当前位姿与速度 对全局路径的裁减以获取局部路径等以及局部地图的获取等 第二章主要讲述了在获取前置条件后 xff0c 如何根据前置条件进行位姿优化 xff0c teb的路径优化主要是调
  • TEB算法详解 参数详解

    teb算法的基本思路之前已经看完了 xff0c 今天主要看一下teb算法的参数配置文件 xff0c 分析一下每个配置参数的作用 xff1a teb的参数主要可以包含以下几个部分 xff1a 1 Trajectory Trajectory的参
  • ROS 如何用自己的电脑连接其他设备查看Rviz

    Rviz的使用在ROS开发中是很常见的东西 xff0c 有时候为了方便我们需要查看某台设备的一些数据 xff0c 但是又没有一些直观的连接工具例如向日葵之类的 这些工具是要基于屏幕的 xff0c 如果设备上没有屏幕是无法使用的 那在只有ss
  • 调试时正常,maven install 找不到符号

    找不到符号 很可能是引用的自己的库没有加载最新版 把所有库都clean gt install一下 或root项目下clean gt install
  • 【springboot】org.aspectj.lang.ProceedingJoinPoint获取返回类型、参数名称/值等

    1 参数值 span class token class name Object span span class token punctuation span span class token punctuation span args s
  • no opencv_java455 in java.library.path

    直接把 opencv build java x64下的文件opencv java455 dll复制到Java JDK安装的bin目录下就解决了这个问题
  • openssl pem 生成公钥和私钥及文件

    下载 xff1a http slproweb com products Win32OpenSSL html 首先得安装OpenSSL软件包openssl xff0c 安装了这个软件包之后 xff0c 我们可以做这些事情 xff1a o Cr
  • DebugDiag 2 收集Dump

    DebugDiag简介 Debug Diagnostic Tool DebugDiag 是微软提供的工具 xff0c 可以用来追踪windows平台下的程序崩溃 xff0c 卡死 xff0c 内存泄漏等一些疑难问题的原因 xff0c 按照问
  • Stream List 的排序

    1 list的正序 span class token class name List span span class token generics span class token punctuation lt span span clas
  • 嵌入式WebSocket的实现

    系统硬件采用STM32 43 DM9000AEP xff0c 具体实现步骤如下 xff0c 第一步建立TCP监听端口可以随意 xff0c 等待浏览器发出http请求 Chrome浏览器发出的请求 第二步建立握手 服务端需要解析最少4个头字段
  • spring boot 注册成 windows 服务

    1 windows系统下将 34 java jar 34 注册成 windows 服务 demo bat 64 echo off d span class token builtin class name cd span d span cl
  • Golang UI

    GUI库 Fyne 跨平台 xff0c 移动端 相对复杂 https github com fyne io fyne Walk 精于 windows https github com lxn walk
  • 解决golang编译提示dial tcp 172.217.160.113:443: connectex: A connection attempt failed

    废话不多说 xff0c 直接开讲 还多新手朋友在编译go的过程中是不是经常会遇到这样的报错 module Get https proxy golang org dial tcp 172 217 160 113 443 connectex A
  • 更新后报错

    更新后 xff0c 运行程序就报这个错 no required module provides package xxx go mod file not found in current directory or any parent dir
  • go: go.mod file not found in current directory or any parent directory; see ‘go help modules‘

    go go mod file not found in current directory or any parent directory see go help modules 此时还需要初始化Go moudle go mod init
  • vc++ 6.0bug C1853

    c documents and settingsstudent桌面musicplayermaindlg cpp 1 fatal error C1853 Debug MusicPlayer pch is not a precompiled h
  • 人工智能知识点汇总

    一 AI应用领域 AI目前主要的应用领域有3个方向 xff0c 包括 xff1a 计算机视觉 语音交互 自然语言处理 1 1 计算机视觉 xff08 CV xff09 计算机视觉是一门研究如何使机器 看 的科学 xff0c 就是指用摄影机和

随机推荐

  • Java17(291)之后 , 禁用了TLS1.1 , 使JDBC无法用SSL连接SqlServer怎么办,以下是解决办法

    修改java security文件 1 找到jre的java security文件 2 打开java security并搜索 jdk tls disabledAlgorithms 61 3 删掉TLSv1 TLSv1 1 4 保存 可以了
  • NumPy、Torch和Tensorflow 代码对比

    深度学习 在深入学习的基本单位上实施初级到高级操作 gt Excerpts 我习惯于为不同的问题创建新的深度学习架构 xff0c 但选择哪个框架 xff08 Keras Pytorch TensorFlow xff09 通常比较困难 由于其
  • 2023年 机器学习常用算法

    01 线性回归 线性回归 xff08 Linear Regression xff09 可能是最流行的机器学习算法 线性回归就是要找一条直线 xff0c 并且让这条直线尽可能地拟合散点图中的数据点 它试图通过将直线方程与该数据拟合来表示自变量
  • STM32上SPI+DMA实现大批量读取flash数据

    最近做项目需要使用SPI 43 DMA xff0c 为了做实验感受DMA传输数据块 xff0c 本人以SPI 43 DMA来读取flash中的数据 网上有很多例程是spi直接读取flash xff0c 无法提高性能 因为只是简单的实验SPI
  • stm32通用定时器1s延时实现LED闪烁

    stm32有很多定时器 xff0c 每种定时器的功能也不尽相同 xff0c 今天学习了如何用通用定时器实现1s延时 xff0c 使LED灯闪烁 xff0c 现总结如下 xff1a 步骤总结 xff1a 使能定时器时钟 gt 配置定时器结构体
  • JDK 中使用js调用java类、方法

    最近研究阅读这个APP 其主要功能就是通过一个个书源 从而实现移动端阅读的体验 比如说某些在线小说阅读网站 会加上相应的广告 从而影响用户阅读体验 于是阅读这个APP就是做了类似净化阅读体验 但是小说阅读网站千千万万 如果去适配每个小说阅读
  • Spring项目在tomcat启动时调用action

    1 实现ServletContextListener接口 添加 64 WebListener注解 2 按照示例写代码 xff1a 第一个是开启时 xff0c 第二个是销毁时
  • ubuntu16.04安装opencv3.4

    参考blog https blog csdn net u013066730 article details 79411767 直接进行 完全没问题 sudo apt get install build essential libgtk2 0
  • 使用switch-case语句输出成绩等级

    问题描述 xff1a 输入一个0 100范围内发分数 xff0c 在不同的等级范围内输出不同的值 xff0c 要求使用switch case控制 0 60 等级为E 60 70 等级为D 70 80 等级为C 80 90 等级为B 90 1
  • 输出图案(六)---输出空心矩形

    输入矩形的宽 xff0c 高 xff0c 输出该空心矩形 xff0c 用 来进行表示 参考代码1 xff1a span class hljs comment include lt stdio h gt span span class hlj
  • C语言中交换两个数的方法

    问题描述 xff1a 程序中有两个数a b 其中a 61 4 b 61 5 xff0c 现在希望交换两个数的值 xff0c 使得a 61 5 b 61 4 在这里我总结了一下目前我已经掌握的C语言中交换两个数的方法 xff0c 主要如下几种
  • 输出平行四边形图案(多种方案)

    问题描述 xff1a 使用 在控制台打印平行四边形 例如 xff1a 平行四边形中最长的一行输出的 是5个 xff0c 则平行四边为 xff1a span class hljs bullet span span class hljs emp
  • 自己实现strcat函数

    问题描述 xff1a 自己实现一个MyStrcat函数 xff0c 要和C语言库函数的strcat函数完成同样的功能 问题分析 xff1a 首先我们要了解一下strcat函数它到底做了什么事情 1 函数原型 char strcat char
  • 简易文件打包程序

    对指定目录下面的文件进行打包 简易解包程序参考博客另外一篇文章 xff1a http blog csdn net yi ming he article details 77689453 打包方式 xff1a 把目录下面的文件名 xff0c
  • 简易解包程序

    对压缩包进行解压 简易压缩程序请参考博客的另外一篇文章 xff1a http blog csdn net yi ming he article details 77689405 解包方式 xff1a 根据打包建立的索引表 xff0c 找到对
  • linux 挂载错误Transport endpoint is not connected

    mount了mfs后 xff0c 重新挂载之后 xff0c 出现如下错误 xff1a usr local mfs bin mfsmount H 192 168 103 101 mnt fuse bad mount point 96 mnt
  • 新字体的永久注册

    CString GetCurrentModuleDir TCHAR szPath MAX PATH 43 1 61 0 if 0 61 61 GetModuleFileName HMODULE amp ImageBase szPath MA
  • yolov5/v7/v8自动检测多个文件夹及截取锚框

    目前yolo仅支持检测图片或单个文件夹 xff0c 但在很多时候需要对成百上千个文件夹中图片进行检测 xff0c 再根据得到的位置信息txt文件来截取图片 xff0c 如何一步完成呢 xff0c 详情见下文 在detect py中将save
  • 带参数的宏定义、函数与内联函数

    文章目录 前言一 宏定义1 基本用法2 带参数的宏定义 二 函数1 定义与声明2 调用 三 内联函数 inline总结 前言 在实际项目开发 xff0c 尤其是嵌入式软件项目中 xff0c 经常可以看到大量宏定义的分布 xff0c 其中又多
  • C++语言为什么跨平台?

    xfeff xfeff 现在主流的手机平台很多 xff0c 比如 xff1a Windows开发的Windows Phone xff08 WP 34 X 34 xff09 Apple 苹果公司 开发的ios xff0c Google 谷歌