首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Objective-C 中 9 种避免使用 Xcode 预处理器宏方法

C++ 程序员们已经深有体会:" "。不幸是,还有很多 Objective-C 程序员尚未领悟到这一点。 本文是Objective-C 中代码气味系列文章中一篇。...因为每次使用预处理器,你看到并不是你编译内容。对于作为常量使用 #define 宏,我们需要避免一些陷阱——其实我们完全可以避免这些陷阱。...*const JMRResponseSuccess = @"Success"; 6、条件编译:注释代码 各种形式条件编译(#if、#ifdef 等)是一种选择性启用或禁用代码块方法。...有关 plist 示例,请参阅《何在暂存和生产 URL 之间切换(How I Switch between Staging and Production URLs)》。...9、条件编译:支持多个项目或平台 Smell #if PROJECT_A … #else … #endif 在多个项目(或多个平台)中共享代码,很容易在共享源文件中偷偷加入特定于项目的扩展。

12310
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Swift和Objective-C混编在有赞移动实践

    这样做主要意义是: 语义上完整描述了一个框架作用 提高编译可扩展性,同一模块只需编译或导入一次,避免了头文件多次引用、解析 减少碎片化,每个模块只处理一次,环境变化不会导致不一致 3.2 modulemap...配置将三方库构建成动态库,在编译产物中都会生成一个 modulemap 和 module umbrella.h 文件 ? 可以在 Swift 文件这样引用该模块 ?...5.3 C++ 混编 Objective-C 是 C++ 超集,就如同 Objective-C 是 C 超集,在OS X 上同时被 GCC 和 Clang 支持编译,.mm 是 Objective-C...在.mm 文件中,Objective-C 代码和 C++ 代码都可以正常编译运行。...构建 Swift 静态库,不影响启动速度 七、总结 目前微商城项目已经进行了混编项目开发,比如学习中心模块是一个纯 Swift 二方库,而消息业务模块则是一个 Swift 和 Objective-C

    2.2K20

    qmake:变量手册

    如果编译器不支持 C++11 或无法选择 C++ 标准,则此选项无效。默认情况下,支持处于启用状态。 c++14:启用 C++14 支持。...如果编译器不支持 C++14 或无法选择 C++ 标准,则此选项无效。默认情况下,支持处于启用状态。 c++17:启用 C++17 支持。...如果编译器不支持 C++20 或无法选择 C++ 标准,则此选项无效。默认情况下,支持处于禁用状态。 c++latest:启用编译器支持最新 C++ 语言标准支持。...64、QMAKE_CXX 指定在构建包含 C++ 源代码项目将使用 C++ 编译器。...135、QMAKE_OBJECTIVE_CFLAGS 指定用于构建项目的目标 C/C++ 编译器标志。除了 QMAKE_CFLAGS 和 QMAKE_CXXFLAGS 之外,还使用这些标志。

    3.8K20

    编写你专属 MSBuild C# 代码生成器:在保存文件自动实时生成你代码

    之前博客中有介绍如何在项目中生成额外代码,也有介绍制作一个生成代码 NuGet 包。...而本文是在此基础上更进一步,可以让生成代码变成实时;更准确说,是在保存文件即生成代码,而无需完整编译一次项目。...我们即将实现是:在保存 Test.txt 文件,会立即执行我们编译流程,这样,我们便能基于 Test.txt 来实时生成一些代码。...关于时机,可以阅读: 通过重写预定义 Target 来扩展 MSBuild / Visual Studio 编译过程 在制作多框架项目的 NuGet 包应该注意问题(buildMultiTargeting...对于已知项(Item)来说,Generator 属性是 MSBuild 编译一个已知元数据(Metadata),其作用为当此文件改变,会执行一个指定 Target 我们将其指定为 MSBuild

    38610

    GUN 意思

    Bash Shell GCC与G++ 首先GCC是the GNU Compiler Collection意思,是GNU一个编译器集合,里面包含了多种编译器及相关工具,gcc、g++。...GCC是多种主要编程语言编译整合(或叫集成)发布。这些编程语言目前包含C, C++Objective-C, Objective-C++, Java, Fortran和Ada。...GNUC++编译器(GNU C++ Compiler),也是GNU Compiler Collection一部分; GDB GDB是GNU Project一个调试程序(GNU Debugger...GDB可以调试以下编程语言编写程序:Ada、C、C++Objective-C、Pascal等,这些程序可能执行在相同机器上(本地调试),也可能执行在不同机器中(远程调试),GDB可以运行在最爱欢迎...参考阅读:The GNU Project Debugger Makefile Makefile是程序编译规则,makefile记录着整个工程编译规则(源文件编译顺序、依赖关系等),通过make

    3.2K20

    编程能力七段论

    这样做好处是:   1,编译器可以在编译就能找出类型错误。   2,编译编译知道类型信息,就可以提高性能。...其中代表是C++Objective-C。   C++是一种新语言,但大部分语言元素是和C兼容。   Objective-C是完全兼容C。...C++模板编程,是在编译,根据源码中使用情况,创建对应类型代码。除了C++这种方式,Java,C#也有类似的机制,叫做“泛型”,但它们实现方式和C++模板很不同。...一些C++高手又在模板基础上搞出了“模板元编程”。因为模板编程,就是C++编译器搞定嘛,模板元编程就是让编译器运算,编译完结果也就算出来了。不知道除了研究和炫技,这玩意有啥用?   ...C++过分复杂,太多坑消耗了大量程序员大量精力。使用C++,只使用面向对象部分和模板部分,其他过于精深特性都不使用。

    1.2K50

    Swift 2023:所有权、宏和 C++ 互操作

    它是 Rust 最具有决定性语言特征之一,是其提供内存安全保证基础。 Rust 使用了第三种方法:内存是通过一个所有权系统来管理,该系统有一套编译器检查规则。如果违反了任何规则,程序就不会编译。...新实现完全采用 Swift 编写,旨在通过消除 Objective-C 和 Swift 之间转换成本来提升性能,并对其进行模块化和清理。...不过,对于其他支持 Swift 但只有原始 GNUstep Objective-C 运行时平台( Linux)来说就不是这样了。...(https://xie.infoq.cn/article/a90dfad02a8148e0f2c1c8cb4) 现代化工具链在大规模 C++ 项目技术实践 (https://www.infoq.cn...争相上市、抢夺本土市场,未来三五年数据库将迎来大洗牌 | 解读数据库2022 颠覆开发模式创新发布背后,看见了云计算下一个十年

    1.4K10

    Mac OS X 背后故事(上)

    原因很简单,使用这个特性,会有很大性能损失,使 Objective-C 内存管理效率低得和 Java 一样,而且一旦有一个模块启用了这个特性,这个进程中所有的地方都要启用这个特性——因此如果你写了一个使用垃圾回收库...这项研究让他在 2005 年毕业,成为小有名气编译器专家,他也因此早早地被 Apple 相中,成为其编译项目的骨干。   ...C++ 是一门非常复杂语言,大多编译器( GCC、MSVC)用了十多年甚至二十多年来完善对 C++ 支持,但效果依然不很理想。Clang C++ 支持却一直如火荼地展开着。...2010 年 2 月 4 日,Clang 已经成熟到能自举(即使用 Clang 编译 Clang,到我发稿,LLVM 3.0 发布已完整支持所有 ISO C++ 标准,以及大部分C++ 0x 新特性...LLVM 周边工具   由于受到 Clang 项目的威胁,GCC 也不得不软下来,让自己变得稍微模块化一些,推出插件支持,而 LLVM 项目则顺水推舟,索性废掉了出道就一直作为看家本领 LLVM-GCC

    3K40

    iOS 代码使用 C++ zero-cost abstraction 特性

    不少 iOS 项目里都有 C++ 代码痕迹,Objective-C 和 C++ 虽然都是 C superset,但二者在语言特性上存在很大差异,Objective-C runtime 使其语言特性更丰富更易使用...zero-cost abstraction Objective-C 和 C++ 同为面向对象语言,我们通过对象来抽象世界中概念,但 Objective-C 抽象伴随着代价,抽象越多,定义类越多,最后编译...即使我们加入更多抽象,比如把 User 类放进 Car 类里面,再把 Car 放进 City 类里,当我们使用 city->car->user->age 编译器依旧会将代码翻译成直白 memory...只列出了关键几步,中间其实省略了 n 个流程,类越多,抽象层次越多,步骤也就越多,这是由于 Objective-C 需要将 class 定义编译进最后 binary 里,需要依赖 class...C++ zero-cost 特性得益于编译高效实现,我们在代码里定义所有类,最后都会被编译器降维,高楼被夷为平地,信息却不会丢失,编译器用一片二向箔将面向对象世界压扁成一幅画,画里机器码仍然能严格准确表达我们意图

    87730

    CC++在Java、Android和Objective-C三大平台下实现混合编程

    Android和iOS开发都支持C++开发,可以一套代码多平台使用。同时C++难以反编译特性也可以为Android开发带来代码保密,另一native特性也可以提高代码运行效率。...一、为什么使用C/C++ 便于移植,用C/C++写得库可以方便在其他平台上再次使用。 代码保护,由于java层代码很容易被反编译,而C/C++库反汇难度较大。...如何在Objective-C项目中使用C++; 在Objective-C使用C/C++非常简单,仅仅需要把.m后缀文件改成.mm即可使用C++,我们通常不会把.mm文件写到整个项目都有,而是设计一个接口...#include #include 2.在普通JAVA项目中使用JNI编程 由于我是在MAC下办公,所以这里就介绍如何在MAC下进行JNI开发,在Windows...编译后文件 根据自己电脑环境,查找编译文件,路径是 /Users/Wiki/Library/Developer/Xcode/DerivedData/DEMO_MAC_JNI-clxymnzifegyfaajsaattzgxqfbr

    1.2K20

    【一通百通】CC++std标准总结

    适用C(或C源代码,C ++,Objective-C和Objective-C ++)标准: -ansi 在C模式下,这相当于 -std = c90。...这将关闭不兼容与ISO C90(编译C代码),或标准C ++(编译C ++时代码)GCC某些特征,asm与typeof关键字,以及预定义unix和vax标识系统类型你正在使用。...有关这些标准版本详细信息,请参阅GCC支持语言标准。当选择编译C或C ++,此选项目前才被支持。...编译器可以接受几个基本标准,“c90' 要么 'c ++ 98'和这些标准GNU标准,“gnu90' 要么 'gnu ++ 98'。...另一方面,当指定了标准GNU标准时,编译器支持所有功能都被启用,即使这些功能改变了基本标准含义。因此,一些严格程序可能会被拒绝。

    1K30

    基于 React Material UI 组件库:永久免费使用 | 开源日报 No.266

    material-uihttps://github.com/mui/material-ui Stars: 91.8k License: MIT picture material-ui 是一个包含基础 React UI 组件库项目...llvm-projecthttps://github.com/llvm/llvm-project Stars: 25.9k License: NOASSERTION llvm-project 是一个模块化和可重用编译器和工具链技术集合...该项目的主要功能、关键特性、核心优势包括: 包含 LLVM 工具箱,用于构建高度优化编译器、优化器和运行时环境 包含多个组件,其中核心部分称为 “LLVM”,包括处理中间表示并将其转换为目标文件所需所有工具...、库和头文件 Clang 前端用于编译 C、C++Objective-C 和 Objective-C++ 代码到 LLVM 位码,并从那里转换成目标文件 其他组件包括 libc++ C++ 标准库,LLD...完整 SQL 支持:与 BI 工具 Metabase 和无代码工具 Appsmith 等软件无缝集成,并可直接使用原生 SQL 检索数据。

    16710

    iOS学习——iOS 整体框架及类继承框架图

    Objective-C和Java C++一样,有封装,继承,多态,重用。...3.2 Objective-C优点   Objective-C语言有C++ Java等面向对象特点,那是远远不能体现它优点Objective-C优点是它是动态。...它指向一个类对象(class object  记住它是个对象,是占用内存空间一个变量,这个对象在编译时候编译器就生成了,专门来描述某个类定义),这个类对象包含了Objective-C 对象一些信息...(为了区分两个对象,把前面提到对象叫Objective-C对象),包括Objective-C对象方法调度表,实现了什么协议等 等。...不考虑@interface关键字在编译作用,可以把NSObject更接近C语言结构表示为: struct NSObject{   Class isa; } Class是用typedef

    3.5K70

    认识 LLVM

    简介 LLVM是一套提供编译器基础设施开源项目,是用 C++ 编写,包含一系列模块编译器组件和工具链,用来开发编译器前端和后端。...,而是包括 LLVM 中介码(LLVM IR)、LLVM调试工具、LLVM C++ 标准库等一系列编译工具及低端工具技术集合。...像真正 RISC 指令集一样,它支持简单指令线性序列,加法、减法、比较和分支。这些指令采用三地址形式,这意味着它们接受一定数量输入并在不同寄存器中产生结果。...LLVM 提供了 Clang 作为官方编译器前端,同时支持 C、C++Objective-C 和 Objective-C++ 语言。...许多 GCC 前端也已经可以与其运行,LLVM目前支持 Ada、C语言、C++、D语言、Fortran、Haskell、Julia、Objective-C、Rust 及 Swift 等语言编译

    1.3K20

    编程语言70年:谁是世界上最好编程语言?

    在补充了一些关键性特征和评价之后,整理出下图: 整理图过程中,发现很多有趣点。让我们按时间顺序从上往下讲这张图。...这时出现了很多新语言蠢蠢欲试,其中包括 D 语言和 Rust:D 语言是 C++编译器作者设计实践一门新语言,它吸收了很实际项目C++经验教训。...但是仔细了解 D 语言你会发现,这就是拿 C++编译器魔改一个「私有 C++语言」编译器。这也导致很多 C++弊病不能彻底废除,属于改良派。 过了 3 年,Rust 横空出世。...对于现有的大型项目的开发人员来说,从 Java 到 Kotlin ,或者从 Objective-C 到 Swift 有点难以适应。...编程语言发展至今,特性互相借鉴情况越来越普遍,语言生态互通也更常见(直接兼容,或者 Bridging 技术),编译型和解释型界限也越来越模糊(比如 Dart 既能编译运行也能解释运行,还能边解释运行边编译

    2.5K100

    iOS编译原理

    C语言演变而来面向对象设计语言,也都兼容标准C语言;但它们属于不同面向对象学派; 两者最大不同在于:OC提供了运行时动态绑定机制,而C++编译静态绑定,并通过嵌入类和虚函数来模拟实现; OC...:OC不允许同一个类中两个方法有相同名字(即使只是参数类型不同),但C++可以; 二、编译型语言与解释型语言 Objective-C属于编译型语言,这是为了保证iPhone执行效率; 1.编译型语言...:新增一门语言只需要修改前端,而新增一种CPU架构只需要修改后端即可; 2.LLVM与Clang LLVM是苹果当前使用编译器: LLVM是一套编译器基础设施项目,为自由软件,以C++写成,包含一系列模块编译器组件和工具链...CLang基于LLVM,是一个高度模块化开发轻量级编译器; CLang主要来自苹果电脑支持,同时支持C、Objective-C以及C++; CLang用于替代Xcode5版本前使用GCC,编译速度提高了...Mach-O文件(dylib、a、tbd),合成一个Mach-O格式可执行文件; 通常项目都会包含多个文件,不同文件之间变量和接口函数就会产生相互依赖关系; 程序运行前,需要使用链接器将多个文件里符号和地址绑定起来

    1.6K20

    七十年编程语言发展漫谈

    +编译器作者设计实践一门新语言,吸收了很实际项目C++经验教训,但是仔细了解 D 语言你会发现,这就是拿 C++编译器魔改一个”私有 C++语言“编译器;这也导致很多 C++弊病不能彻底废除,...,在性能上比垃圾回收有着极大优势,虽然性能无损,但是相比垃圾回收模式则需要开发者编码增加对象所有权思考过程,即便如此,这也比在 C++花几个星期解决内存访问异常问题好多了呀。...简而言之,对谷歌 Carbon 还是非常期待。 除了在应用层 C++有待进步,即使在底层场景,C++也有很大进步空间。...编程语言发展至今,特性互相借鉴情况越来越普遍,语言生态互通也更常见(直接兼容,或者 Bridging 技术),编译型和解释型界限也越来越模糊(比如 Dart 既能编译运行也能解释运行,还能边解释运行边编译...AI 加持下,准确把具有垃圾回收语言( Kotlin)往没有垃圾回收语言( C)转换也变得可能。

    89671
    领券