`

Objective-C预处理程序

 
阅读更多

Objective-C学习笔记之预处理程序是本文要介绍的内容,主要介绍了预处理程序中语句的使用方法,预处理程序语句以(#)标记。来看详细内容。

一、#define

1、更高级的定义类型

给符号名称指派表达式和其他任何东西。如:

  1. #defineTWO_PI2*3.141592654,#defineAND&&

预处理程序假设定义包含在程序的一行中。如果需要第二行,那么上一行的最后一个字符必须是反斜线符号“\”。如:

  1. #defineIS_LEAP_YEAR(y)y%4==0&&y0!=0\
  2. ||y@0==0

可带参数。预定义(definition)通常称作“宏”。

2、#运算符

如果在宏定义中参数之前放置一个#,那么在调用该宏时,预处理程序将根据宏参数创建C风格的常量字符串。如:

  1. #definestr(x)#x
  2. str(testing)——"testing"
  3. str("hello")——"\"hello"\"

3、##运算符

用于把两个标记(token)连在一起。它的前面(或后面)是宏的参数名称。预处理程序使用调用该宏时提供的实际参数,并且根据该参数和##之后(或之前)的标记创建单个标记。如:

  1. #defineprintx(n)printf("%i\n",x##n);
  2. printx(20)——printf("%i\n",x20);

二、#import语句

.h->头文件(或包含文件)。

设置一组#import语句,将其输入到一个xxx.h的独立文件中,若需要则使用预处理程序指令:

#import "xxx.h"。

#import <……>导致预处理程序只在特殊的"system"头文件目录中寻找包含文件,当前目录不会被搜索。

#import "……"预处理程序在一个或者多个文件目录。

三、条件编译

通常用于创建可以在不同计算机系统上编译运行的程序,经常用来开关程序中的各种语句。

1、#ifdef、#endif、#else和#ifndef语句

从一个计算机系统上移植到另一个计算机系统上。

2、#if和#elif预处理程序语句

表达式结果非零——#else、#elif或#endif为止的所有后续行,否则跳过它们。

特殊运算符:#define (name) 也能用在#if语句中。

3、#undef语句

使一些已经定义的名称称为未定义的。


分享到:
评论

相关推荐

    Objective-C程序设计

    《objective-c程序设计》通过大量的实例系统地介绍了objective-c语言的基本概念、语法规则、框架、类库及开发环境。读者在阅读《objective-c程序设计》后,可以掌握objective-c语言的基本内容,并进行实际的iphone/...

    Objective-C2.0程序设计

    12.3.2 #if和#elif预处理程序语句 12.3.3 #undef语句 12.4 练习 第13章 基本的C语言特性 13.1 数组 13.1.1 数组元素的初始化 13.1.2 字符数组 13.1.3 多维数组 13.2 函数 13.2.1 参数和局部变量 13.2.2 函数的返回...

    [Objective-c程序设计].杨正洪等.扫描版

    《Objective-C程序设计》(作者杨正洪、郑齐心、李建国)通过大量的实例系统地介绍了Objective-C语言的基本概念、语法规则、框架、类库及开发环境。读者在阅读本书后,可以掌握Objective-C语言的基本内容,并进行...

    object-c程序设计第四版

    前6章讲述Objective-C语言,包括数据类型、运算符、表达式、条件语句、循环语句、类、协议、继承、类别、编译预处理等内容。第7章到第10章讲述Objective-C的基础框架,以及文件操作、内存管理、数据保存等内容。第11...

    TweakWithoutLogos:简短的无徽标调整开发指南

    大多数iOS调整开发人员都使用Objective-C预处理程序Logos来简化调整编写过程。 徽标将伪指令(例如%hook , %new , %ctor , %init等)转换为纯Objective-C代码,该代码与基板交互以在运行时挂钩代码。 该存储库...

    gcc,g++ GNU C 手册

    .m Objective-C源程序;预处理,编译,汇编 .i 预处理后的C文件;编译,汇编 .ii 预处理后的C++文件;编译,汇编 .s 汇编语言源程序;汇编 .S 汇编语言源程序;预处理,汇编 .h 预处理器文件;通常不出现在命令行上

    Obfuscation-Demo:演示如何从Swift代码中访问在运行时(使用编译时#define)对其名称进行混淆的Objective-C类和方法,并在源代码中使用易于理解的名称-How to use the source code

    混淆演示 演示如何从Swift代码访问在运行时(使用编译时#define )对其名称进行混淆的... 这种方法的问题在于,由于#define预处理程序字符串替换不会扩展到Swift源文件,因此与混淆的Objective-C类交互的Swift代码需

    GCC资料大全.chm

    .m Objective-C源程序;预处理,编译,汇编 .i 预处理后的C文件;编译,汇编 .ii 预处理后的C++文件;编译,汇编 .s 汇编语言源程序;汇编 .S 汇编语言源程序;预处理,汇编 .h 预处理器文件;通常不出现在命令行上

    GNU GCC 手冊.zip

    .m Objective-C源程序;预处理,编译,汇编 .i 预处理后的C文件;编译,汇编 .ii 预处理后的C++文件;编译,汇编 .s 汇编语言源程序;汇编 .S 汇编语言源程序;预处理,汇编 .h 预处理器文件;通常不出现在命令行上

    GCC技术参考大全

    第 3 章 预处理程序 第 4 章 编译 C 程序 第 5 章 编译 C++程序 第 6 章 编译 Objective-C 第 7 章 编译 Fortran 程序 第 8 章 编译 Java 第 9 章 编译 Ada 程序 第 10 章 混合语言 第 11 章 国际化 第 12 章 连接和...

    learn-c

    C预处理程序不是编译器的一部分,而是编译过程中的一个单独步骤。 简单来说,C预处理器只是一种文本替换工具,它指示编译器在实际编译之前进行所需的预处理。 我们将C预处理器称为CPP。 所有预处理器命令均以哈希...

    gcc编译器(编译选项/过程)

    GCC 原名为 GNU C 语言编译器(GNU C Compiler),因为它原本只能处理C语言。GCC 后扩展,变得可处理 C++,后又支持更多编程语言,如Fortran、Pascal、Objective-C、Java、Ada、Go以及各类处理器架构上的汇编语言等...

    XCGLogger:在Swift项目中使用的调试日志框架。 允许您将详细信息记录到控制台(以及可选的文件)中,就像使用NSLog()或print()一样,但是具有其他信息,例如日期,函数名称,文件名和行号

    Swift不包含C预处理程序,因此开发人员无法使用他们将在Objective-C中使用的调试日志#define宏。 这意味着我们传统的生成良好调试日志的方式不再起作用。 仅使用普通的旧print调用就意味着您会丢失很多有用的信息,...

    c#毕业设计源码下载-distcc:C,C++和ObjectiveC的分布式构建

    c#毕业设计源码下载distcc-一个免费的分布式C ...3.0中添加的distcc“泵”功能通过不仅向distcc服务器分发编译而且还向distcc服务器分发预处理程序而对distcc进行了改进。 这要求服务器和客户端具有相

    distcc:适用于C,C ++和Objective C的分布式构建

    distcc-一个免费的分布式C / C ++编译器系统 马丁·波尔当前文档: : 正式 Fergus Henderson,Nils Klarlund,Manos Renieris和Craig Silverstein(Google Inc.)添加了“泵”功能distcc是一个程序,用于在网络上的...

    GTK+2.0+中文教程.pdf

    它们都不需要特殊的预处理程序,因此你可以同时使用标准 C++ 和 GTK。 本教程试图尽可能详细地描述 GTK,但是肯定不能面面俱到。本教程假设你能够较好的理解 C 语言,并且了解怎样编写一个 C 程序。有 X 编程经验会...

    BDSwitchEnvDemo:示例项目演示环境之间的切换

    但是,该应用程序将仅查找名为environment.plist的文件,因此构建过程将在适当的plist上进行复制。 使用Xcode的Info.plist预处理功能可根据相应的environment_XXX.plist文件中的设置动态填充Info.plist 。 使用...

Global site tag (gtag.js) - Google Analytics