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

GCC支持Objective C的故事?Objective-C?GCC只能编译C语言吗?Objective-C 1.0和2.0有什么区别?

GCC支持Objective C的故事

Objective-C 主要由 Stepstone 公司的Brad Cox和 Tom Love 在1980 年左右发明。乔布斯离开苹果公司后成立了NeXT STEP公司, 买下了Objective-C 语言的授权。GCC对Objective-C语言的支持是在1992年加入的,具体是在GCC 1.3版本中首次引入的。GCC的后续版本继续改进了对Objective-C的支持,包括对Objective-C++的支持,后者允许在同一个源文件中混合使用Objective-C和C++代码。但随着苹果公司对ObjC编程语言有更多的需求修改,但GCC社区有时并不买账,苹果决定请高人开发Clang/LLVM对ObjC提供更好支持,对于ObjC的支持,Clang的支持越来越及时,而GCC的支持也逐渐老旧。

Objective-C

ObjC比较小众,在1980年左右由Stepstone公司的Brad Cox和Tom Love发明。后来NeXT公司获得ObjC语言使用权,再后来到1996年NeXT被苹果公司收购也变成苹果公司使用,Mac市场占有率本身就不高,ObjC没有太多程序员。在移动互联网时代iPhone开发爆发,ObjC也开始火爆。真正了解ObjC的人会觉得它算是面向对象语言中比较易学且实用的一种,不像C++那么复杂,ObjC真正做到了够用即可。

ObjC是C的面向对象扩展

  • ObjC是C的超集,增加了面向对象设计,借鉴了SmallTalk消息机制,此机制允许动态判断某个对象是否有某个方法,不像C++类方法调用,编译时期就决定是否可调用。
  • 习惯了C代码风格,刚开始学ObjC消息机制, 几乎无一例外感到不解和困扰,如果连续使用超过半年以上,慢慢会习惯并感受到它消息机制的”优雅”, 虽然代码没有C简洁,但清晰易懂。
  • ObjC可以用GCC编译,早期苹果macOS和iOS均用GCC编译,后来转向Clang.

特别的语法

  • ObjC用@表示类定义和实现,起源于Smalltalk 中,使用 @ 符号来表示类和类定义的方法。

1.0和2.0

  • GNUStep只支持ObjC 1.0, 对2.0支持不完整。

GCC只能编译C语言吗?

最早,GCC只用于编译C语言,后来GCC逐渐演变为GNU Compiler Collection,变成编译器的前端集合。GCC相当于只是前端,理论上后面可以接任何语言编译器完成编译。目前支持列表如下:

  • C (gcc)
  • C++ (g++)
  • Objective-C/C++ 1.0 (部分2.0) (gobjc)
  • Java (gcj and gij) (GCC 7开始移除)
  • Go 1
  • Fortran (g77 or gfortran)
  • Ada
  • D 2.0
  • BRIG(HSAIL) (GCC 7开始加入,GCC 12开始移除)
  • M2(Modula-2) (截止2024-3-31统计,正在开发)

例如,当我们用gcc命令编译.cpp文件,实际上是调用g++程序编译.cpp文件。

Objective-C 1.0和2.0有什么区别?

2006年,苹果公司发布2.0版本。2.0比1.0有如下主要变化:

  • 属性
    C#的属性和它很类似,可以自动生成getter/setter方法。
  • 泛型
    轻量级泛型,由编译器实现。
  • 分类
    C#有partitial class概念,可让一个类实现分布在不同文件。
  • 改进的垃圾回收
    2.0引入了ARC,在macOS上类似于Java/C#自动垃圾回收,在iOS上并未启动自动垃圾回收。
  • block语法
    允许开发者在函数内部定义匿名函数,并在不同的上下文中传递和使用它们。
  • 快速枚举


若文章对您有帮助,欢迎关注 程序员小迷 。助您在编程路上越走越好!

微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是 程序员小迷 (致力于C、C++、C#、Android、iOS、Java、Kotlin、Objective-C、Swift、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

相关文章:

GCC支持Objective C的故事?Objective-C?GCC只能编译C语言吗?Objective-C 1.0和2.0有什么区别?

GCC支持Objective C的故事 Objective-C 主要由 Stepstone 公司的Brad Cox和 Tom Love 在1980 年左右发明。乔布斯离开苹果公司后成立了NeXT STEP公司, 买下了Objective-C 语言的授权。GCC对Objective-C语言的支持是在1992年加入的,具体是在GCC 1.3版本中…...

详解深度学习中的Dropout

Dropout是一种在神经网络训练中常用的正则化技术,其操作是在每次训练迭代中随机“丢弃”一部分神经元(即将其输出置为零)。以下是对这一操作的详细解释: 一、基本思想 Dropout的基本思想是减少神经元之间的复杂共适应关系&#…...

SQL-杂记1

PIVOT的使用: 行转列IIF()的使用:IIF( boolean_expression, true_value, false_value)多个字段使用MX()函数 SELECTD.ID,字段1,字段2,字段3,字段4,字段5,X.MinDateValue FROM 表名 D WITH(NOLOCK) OUTER APPLY (SELECT MIN(DateValue) AS MinDateValueFROM (VALUES (字段1),(字…...

Python(十七)excel指定列自动翻译成英文

前言 本章主要讲述在excel的指定列后面添加一列,并翻译成英文 一、效果图 二、代码 实际需求: # -*- codeing utf-8 -*- # time: 2025/1/16 16:32 # Author : Mikasa # # Aim:自动将客户发的货物清单里的商品名称,翻译成英文…...

Ubuntu20.04取消root账号自动登录的方法,触觉智能RK3568开发板演示

Ubuntu20.04默认情况下为root账号自动登录,本文介绍如何取消root账号自动登录,改为通过输入账号密码登录,使用触觉智能EVB3568鸿蒙开发板演示,搭载瑞芯微RK3568,四核A55处理器,主频2.0Ghz,1T算力…...

诡异的Spring @RequestBody驼峰命名字段映射失败为null问题记录

问题 一个非常常规的Spring Controller,代码如下: import lombok.RequiredArgsConstructor;Slf4j RestController RequiredArgsConstructor RequestMapping("/api/v1/config") public class ConfigController {private final ConfigService …...

YOLOv10改进,YOLOv10检测头融合RFAConv卷积,添加小目标检测层(四头检测)+CA注意机制,全网首发

摘要 空间注意力已广泛应用于提升卷积神经网络(CNN)的性能,但它存在一定的局限性。作者提出了一个新的视角,认为空间注意力机制本质上解决了卷积核参数共享的问题。然而,空间注意力生成的注意力图信息对于大尺寸卷积核来说是不足够的。因此,提出了一种新型的注意力机制—…...

周末总结(2024/01/18)

工作 人际关系核心实践: 要学会随时回应别人的善意,执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己,抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内,职场社交不要放在5min以外 职场的人际关系在面对利…...

LLM - 大模型 ScallingLaws 的迁移学习与混合训练(PLM) 教程(3)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/145212097 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 Scalin…...

【软件开发过程管理规范】需求管理,需求分析,设计开发管理,测试管理(Word)

一、需求管理规程 1 简介 2 过程总体描述 2.1 过程概述 2.2 过程流程图 3 过程元素描述 3.1 准备阶段 3.2 需求调研 3.3 需求分析 软件开发人员及用户往往容易忽略信息沟通,这导致软件开发出来后不能很好地满足用户的需要,从而造成返工。而返工不仅在技术…...

计算机网络 (49)网络安全问题概述

前言 计算机网络安全问题是一个复杂且多维的领域,它涉及到网络系统的硬件、软件以及数据的安全保护,确保这些元素不因偶然的或恶意的原因而遭到破坏、更改或泄露。 一、计算机网络安全的定义 计算机网络安全是指利用网络管理控制和技术措施,保…...

RPA编程实践:Electron实践开始

文章目录 前言闲话少叙,打开官网版本发布安装在 Windows 上安装在 macOS 上安装在 Linux (Ubuntu) 上安装 前言 上回说道,我们electron适合于熟悉web开发,但想要研发桌面应用的人。 但我觉得这个需求应该不是很多。 因为使用electron&#…...

ORB-SLAM2源码学习:MapPoint.cc④: 新增地图点总结

前言 让我们来总结ORB-SLAM2 中的新增地图点。 1.在第一阶段跟踪中的恒速模型跟踪中新增地图点 针对双目相机或RGB-D相机,找出上一帧中具有有效深度值且不是地图点的特征点,将其中较近的点作为上一帧新的临时地图点, 并记录在向扯mlpTempo…...

2025西湖论剑-babytrace

前言 就做了下题目,pwn1/3 都是签到,pwn2 后面绕 ptrace 有点意思,简单记录一下 漏洞分析 子进程中的读/写功能没有检查负数的情况,存在越界读写: void __fastcall get_value(__int64 *int64_arr) {__int64 ll; //…...

绘图专用,26个常见流程图符号及其解释

关注作者 当您设计网站、构建应用程序或绘制业务系统时,您需要一种方法来清晰地绘制步骤和用户流程。虽然您可以使用流程图来概述这些过程,但箭头和方框只能帮助您到目前为止。为了清楚地表达您的意思,您需要流程图符号。 为了帮助解释每个流…...

【个人学习记录】软件开发生命周期(SDLC)是什么?

软件开发生命周期(Software Development Life Cycle,SDLC)是一个用于规划、创建、测试和部署信息系统的结构化过程。它包含以下主要阶段: 需求分析(Requirements Analysis) 收集并分析用户需求定义系统目标…...

自学SpringBoot笔记

概念 什么是SpringBoot? Spring Boot 是基于 Spring Framework 的一款开源框架,主要用于简化 Spring 应用程序的开发。它通过提供一系列的 开箱即用的功能 和 自动配置,让开发者可以快速构建生产级别的独立应用程序,而无需手动配…...

03JavaWeb——Ajax-Vue-Element(项目实战)

1 Ajax 1.1 Ajax介绍 1.1.1 Ajax概述 我们前端页面中的数据,如下图所示的表格中的学生信息,应该来自于后台,那么我们的后台和前端是互不影响的2个程序,那么我们前端应该如何从后台获取数据呢?因为是2个程序&#xf…...

[leetcode](找到vector中的特定元素并删除)无重复字符的最长子串

一.找到vector中的特定元素并删除 #include <iostream> #include <vector> #include <algorithm> int main() { // 示例 vector std::vector<int> vec {1, 2, 3, 4, 5, 6}; // 要删除的元素 int aim 3; // 查找元素 auto it std::fin…...

Mockito+PowerMock+Junit单元测试

一、单元测试用途 1、日常开发团队要求规范&#xff0c;需要对开发需求代码进行单元测试并要求行覆盖率达到要求&#xff0c;DevOps流水线也会开设相关门禁阀值阻断代码提交&#xff0c;一般新增代码行覆盖率80%左右。 二、Mock测试介绍 1、Mock是为了解决不同的单元之间由于…...

Ncat: bind to :::7777: Address already in use报错问题解决

问题描述 Ncat: bind to :::7777: Address already in use. QUITTING. 具体解决方法 If you are in linux environment try, Use netstat -tulpn to display the processeskill -9 <pid> This will terminate the process If you are using windows, Use netstat -…...

Docker 搭建mysql 连接超时问题,xxl-job启动mysql连接报错,禁用dns

1.本地连接Navicat报错信息&#xff0c;猜测是navicat默认连接超时导致的&#xff0c;后面换成idea一个插件虽然慢但连接上了 2013 - Lost connection to MySQL server at reading initial communication packet 2.启动xxl-job会报错&#xff0c;网上有人mysql驱动与数据库不匹…...

在线图片像素颜色拾取工具

在线图片像素颜色拾取工具&#xff0c;非常方便的一个工具&#xff0c;无需登录&#xff0c;用完就走。 包括中文和英文版本。 https://getcolor.openai2025.com...

Qt之登录界面(splash)

在上一篇多文档窗口设计(MDI)的基础上增加了一个登录界面&#xff08;splash&#xff09;. 该模块可以扩展为常规的软件登录界面。 界面展示如下 如果用户名和密码输入正确&#xff0c;则调到MDI界面&#xff0c;如果用户名和密码一共输入三次以上&#xff0c;则程序强制退出…...

NotebookLM:Google 最新 AI 笔记助理解析与实战应用

NotebookLM&#xff1a;Google 最新 AI 笔记助理解析与实战应用 在 AI 驱动的生产力工具不断进化的今天&#xff0c;Google 推出的 NotebookLM&#xff08;Notebook Language Model&#xff09;成为了一款备受关注的智能笔记助理。它结合了 Google 的大语言模型&#xff08;LL…...

软路由系统iStoreOS 一键安装 docker compose

一键安装命令 大家好&#xff01;今天我来分享一个快速安装 docker-compose 的方法。以下是我常用的命令&#xff0c;当前版本是 V2.32.4。如果你需要最新版本&#xff0c;可以查看获取docker compose最新版本号 部分&#xff0c;获取最新版本号后替换命令中的版本号即可。 w…...

vue3本地文件下载

开发记录&#xff1a; vue3本地下载文件要把文件放到public下&#xff0c;如果放在src里面可能会出现这个问题...

纯代码实现给WordPress添加文章复制功能

在给wordpress添加内容时&#xff0c;有时会遇到文章复制的功能&#xff0c;但是wordpress又没有这个功能。把下面一段代码添加到functions.php文件中&#xff0c;就可以实现这个功能。 /** Function for post duplication. Dups appear as drafts. User is redirected to the…...

Redis 中 TTL 的基本知识与禁用缓存键的实现策略(Java)

目录 前言1. 基本知识2. Java代码 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 单纯学习Redis可以看我前言的Java基本知识路线&#xff01;&#xff01; 对于Java的基本知识推荐阅读&#xff1a; java框架…...

【PyQt】图像处理系统

[toc]pyqt实现图像处理系统 图像处理系统 1.创建阴影去除ui文件 2.阴影去除代码 1.创建阴影去除ui文件 UI文件效果图&#xff1a; 1.1QT Desiger设置组件 1.两个Pushbutton按钮 2.两个label来显示图像 3.Text Browser来显示输出信息 1.2布局的设置 1.先不使用任何La…...

侦探公司做网站的资料/搜索引擎是什么意思啊

蛋花花&#xff1a;人工智能首款触觉芯片拟投入研发&#xff01;人工智能发展日新月异&#xff0c;最近蛋花花了解曼彻斯特大学与北京他山科技联合建立的人工智能触觉传感实验室在北京正式揭牌&#xff0c;拟计划研发让人工智能拥有触觉的电容芯片&#xff0c;完善AI的感知智能…...

江门网站建设方案策划/小程序推广运营的公司

【强制】不允许任何魔法值&#xff08;即未经预先定义的常量&#xff09;直接出现在代码中。 反例&#xff1a;String key "Id#taobao_" tradeId; cache.put(key, value); 【强制】在 long 或者 Long 赋值时&#xff0c;数值后使用大写的 L&#xff0c;不…...

广州市住房和城乡建设厅网站首页/seo工程师是做什么的

死锁产生的四个必要条件 &#xff08;1&#xff09; 互斥条件&#xff1a;一个资源每次只能被一个进程使用。 &#xff08;2&#xff09; 请求与保持条件&#xff1a;一个进程因请求资源而阻塞时&#xff0c;对已获得的资源保持不放。 &#xff08;3&#xff09; 不剥夺条件:进…...

湛江网站的建设/2022世界足球排行榜

在环境变量中配置mysql的bin 怎么找到bin目录&#xff0c;在管理工具&#xff0c;服务&#xff0c;常规选项卡下找到 双击mysql后&#xff0c;常规选项卡下的路径就是bin的路径&#xff0c;然后把该路径配置到环境变量中&#xff0c;即可&#xff0c;然后net start mysql 转载于…...

做网站最好的语言/互联网关键词优化

&#xff1c;转自&#xff1e;http://www.cnblogs.com/bytekiller/archive/2007/06/21/792411.html请问NEW和USING的区别&#xff1f;很多公司的面试都可能问或是考查这个看似基础的东西&#xff0c;恕我浑浑噩噩&#xff0c;我可能回答的不够好&#xff01;习惯性质的是由于我…...

国有林场网站建设/第三方网站流量统计

前言上一篇对Digester做了基本介绍&#xff0c;也已经了解了Digester的基本使用方法&#xff0c;接下来将继续学习其相关特性&#xff0c;本篇主要涉及以下几个内容&#xff1a;规则模块绑定&#xff0c;通过定义一个RulesModule接口实现类来完成规则的预先绑定&#xff0c;运行…...