使用xcode的preprocess功能学习宏定义

C、C++和Objective-C都支持宏定义。宏在编译预处理过程中会进行代码替换。我们可以通过命令行非常容易就能的到一个源文件处理后的结果。

#define kMax 100int main(int argc, char * argv[]) {
    int a = 100;
    if (a < kMax) {
        a++;
    }
    else {
        a = 0;
    }

    return 0;}

编译预处理命令:

clang -E main.m

预处理后的结果:

int main(int argc, char * argv[]) {
    int a = 100;
    if (a < 100) {
        a++;
    }
    else {
        a = 0;
    }

    return 0;}

当然,在实际应用中还有许多其它的预处理指令,包括includeififdef等等。并且还有一些符号,比如连接##、转化字符串#等。并且还可以定义函数形式的宏,以及在宏定义中引用其它宏。这样导致初学者很难把握到底一个宏展开后是什么样子的。虽然我们可以通过命令行进行处理,但终归不方便。实际上从Xcode 4开始就有预处理和汇编的功能,能够非常方便的查看一个源文件的预处理结果或者汇编代码。

两种方式查看处理结果
  1. 使用菜单 Product > Perform Action > Preprocess "xxx"
  2. 使用辅助编辑器 打开辅助编辑器后,编辑编辑器上面选择文件的地方,从弹出菜单中执行PreprocessAssembly功能。

参考资料: 1 .Xcode预处理功能:https://bpoplauschi.wordpress.com/2014/02/20/xcode-preprocess-assistant/

2 .gcc宏定义Macro:https://gcc.gnu.org/onlinedocs/cpp/Macros.html

3 .微软宏定义:https://msdn.microsoft.com/en-us/library/503x3e3s.aspx

4 .常用宏定义:http://www.cplusplus.com/doc/tutorial/preprocessor/

本文档由长沙戴维营教育整理。

http://io.diveinedu.com

时间: 2024-10-22 04:05:21

使用xcode的preprocess功能学习宏定义的相关文章

C语言学习——宏定义

1.简单的宏定义 #define <宏名> <字符串> 例:#define LEN 0.5 2.带参数的宏定义 #define <宏名> (<参数表>) <宏体>例:#define Fun(para) para*2 3.实例分析 1 #define VALUE 2+2 2 void main() 3 { 4 int n=VALUE*VALUE; 5 printf("%d",n); 6 } 这段代码的输出是多少呢?16?也许会让

论XCODE工程里使用的宏定义.

在XCODE开发过程中,经常会遇到引用头文件,引用库路径的问题,如果不是直接的源码引入,则需要在工程中增加设置.虽然现在有了Pod这类集合管理工具,但有时为了一个很小的lib引入Pod这尊大神还是有点杀鸡用牛刀.在这里讨论下怎么使用XCODE中的几个宏在调整路径.$(SRCROOT),这个宏的含义是指工程的XCODEPROJ文件所在的路径,后面的所有目录都以该路径为参照 设置头文件搜索路径. 关于路径的定位,有个简单的方法,在终端里用ls查看,起始目录是xcodeproj所在目录,只要能ls到你

最全Pycharm教程(24)——Pycharm编辑器功能之宏定义

1.为什么使用宏 加入你需要重复某种操作很多次,例如选中源码并将其发送到控制台端调试,我们能不能将着一系列操作简化为一步,甚至用一组快捷键来代替呢? 2.准备工作 (1)Pycharm版本为2.7或者更高. (2)与 product documentation中的行为保持一致. (3)创建了一个项目,并向其中添加了至少两个脚本,详见Getting Started和 Debugger 3.录制宏 在主菜单上选择Edit→Macros→Start Macro Recording命令,在窗口底部出现M

VC中预处理指令与宏定义详解

刚接触到MFC编程的人往往会被MFC 向导生成的各种宏定义和预处理指令所吓倒,但是预处理和宏定义又是C语言的一个强大工具.使用它们可以进行简单的源代码控制,版本控制,预警或者完成一些特殊的功能. 一个经典的例子 使用预处理与宏定义最经典的例子莫过于加在一个头文件中以避免头文件被两次编译.试想这种的情况,有一个文件headerfile.h 它被包含在headerfile1.h中,同时在headerfile2.h 中也被包含了,现在有一个CPP文件,implement.cpp 包含了headerfi

define 宏定义

1.写出两个整数交换的宏定义 #define SWAP(a,b) {a=a+b; b=a-b; a=a-b; } 2.设计一个单行的宏ARRAY_SIZE(x),用于计算x代表的数组的元素数目 #define ARRAY_SIZE (sizeof x(array)) 3.条件编译: 预处理功能(宏定义.文件包含.条件编译)中的条件编译. #ifndef xxx //测试是否被宏定义过 #define xxx ... #endif 作用:头文件的重复包含和编译. #ifdef 标识符 ... #e

c++ 宏定义 ## 的使用

一年半前,见过宏定义##的使用,实现类似反射机制,通过字符串创建类对象的代码,感觉很神奇. 两个月前,利用##的语法,实现一个小功能,通过机组字符串排列组合,调用一个万行代码,计算功能类的函数接口. 三四天前,简单概要的把代码提纯,记录下来,以备后用.代码量不多,但每次写都好费劲,至少写了5遍了,仍然费劲. main.cpp 1 #include <iostream> 2 #include "register.h" 3 #include "registerfun.

#define 宏定义 与 typedef 类型定义

一 #define 宏定义 1. 宏基本定义 #define 宏名 宏定义字符串 # 表示它在预编译处理中起作用,而不是真正的 C 语句,行尾无须跟分号,如果加了分号,分号作为宏定义的一部分. 宏名常采用大写字母,宏名与定义字符串间用空格分隔,所以宏名之间不能有空格. 宏定义字符串是宏名对应的具体实现过程,可以是任意字符串,中间可以有空格,以回车符作为结束. 栗子:#define PI 3.1415926 宏的用途: 1)符号常量,如PI.数组大小定义,以增加程序的灵活性 2)简单地函数功能实现

空的宏定义作用及常见用法

我们学习宏定义的第一个概念是,宏定义作为替换作用. 例如: #define SIZE 32 // 接下来代码使用SIZE就相当于32 宏定义是编译器在编译时,将程序中所有SIZE替换成32,我这里就不详细将宏定义的知识, 下面讲讲在项目中,看到空的宏定义是什么情况以及它作用和用法. 先看看项目中的代码, 如下: #ifndef SQLITE_API # define SQLITE_API #endif 这个宏定义什么都没有,作用是什么呢? 作用是标志 #ifndef __TYPE_DEFINE_

Linux学习笔记——举例说,makefile 添加宏定义

0.前言 从学习C语言開始就慢慢開始接触makefile,查阅了非常多的makefile的资料但总感觉没有真正掌握makefile.假设自己动手写一个makefile总认为非常吃力. 所以特意借助博客总结makefile的相关知识.通过样例说明makefile的详细使用方法. 例说makefile分为下面几个部分.很多其它内容请參考[例说makefile索引博文] 1.仅仅有单个C文件 2.含有多个C文件 3.须要包含头文件路径 4.添加宏定义 5.添加系统共享库 6.添加自己定义共享库 7.一