zoukankan      html  css  js  c++  java
  • #define与typedef 宏的定义

     


    #define 是宏定义,所谓的宏定义,就是将某段代码、地址、字符串等一串的文字,用一个宏来代替。#define是一种预处理。

    //宏的定义 : 原理文本代换

    1. 可以定义一个变量 (常量)

    2. 可以定义一种 类型

    3. 可以定义一段代码(其实就是定义一段字符串) :plsql 中的动态语句,java中的动态代理 (代码生成器)

    4. 可以定义一个运算符

    宏其实就是用 : 可以定义代码中的任何东西   : (定义一个标识)去代表 (一段代码:这个代码的是意思是只要代码中出现的任何字符)

     

     

    #define与typedef功能类似,但它除了定义数据类型外,还可以定义给变量、语句等等定义,还可以包含参数。#define的原理是文本替换

    #define INTEGER int
    //把int定义成INTEGER
    #define PRINTNUM(i) NSLog(@"%d",i)
    //把后面的输出语句定义成带参数的PRINTNUM
    int main (int argc, const char * argv[])
    {
     
        @autoreleasepool {
            INTEGER i=5;
            NSLog(@"%d",i);
     
            PRINTNUM(555);
     
     
        }
        return 0;
    }

    #define最常见的用法是定义常量

    #define MAX_VOLUME 11 

    #define kDatabaseName @"database.sqlite3"


    经常采用的一种做法是,把#define放置到一个头文件中,然后,将其包含到各种源文件中。这样,就可以通过在头文件中更改单个的值,从而改变该常量在所有源文件中的值。传统的C对于定义常量所使用的命名惯例是,使用全部大写字母。传统的Apple命名惯例是以一个k开始常量名称,剩下的名称使用CamelCase法命名:

    #define kMaximumVolume 11 

    #define kUrl @"http://google.com" 


    Say again,#define的原理是文本替换。#define定义时并不会真正去执行它所代表的东东,而是当真正在用到这个define的值时,会进行文本替换然后才执行

    例1,

    #define PIETWO 3.14159*2

    上面预定义了一个PIETWO,其代表3.14159*2,但并不是它已经执行了3.14159*2这个运算。而是当你使用这个PIETWO时,

    float x = PIETWO * 10

    这时就会用  3.14159*2 来替换PIETWO,然后才来进行运算。

    例2 在AppDelegate.m里定义了

    #define ApplicationDelegate ((AppDelegate *)[UIApplication sharedApplication].delegate)

    这并不表示“执行了 ((AppDelegate *)[UIApplication sharedApplication].delegate) 然后把这段代码的返回值赋给ApplicationDelegate",而是表示”ApplicationDelegate这个变量就代表 ((AppDelegate *)[UIApplication sharedApplication].delegate) 这段代码,当用到ApplicationDelegate这个变量时,就用这段代码来ApplicationDelegate并执行。
    如在你的viewcontroller.m
    import "AppDelegate.h"
    ....
    ApplicationDelegate.isLogin=YES;


    由于#define实际上是作为文本替换,它甚至可以用来定义运算符
    #define EQUALS ==
    使用时为
    if(value1 EQUALS value2)
     
  • 相关阅读:
    django框架——十二
    django框架——十一
    请简述一下你所了解的数据源控件有哪些
    在ASP.NET中,<%= %>和<%# %>有什么区别
    请解释ASP.NET中的web页面与其隐藏类之间的关系
    什么是viewstate,能否禁用?是否所用控件都可以禁用
    WEB控件及HTML服务端控件能否调用客户端方法?如果能,请解释如何调用
    静态类和静态方法的好处
    请写出在ASP.NET中常用的几种页面间传值的方法,并说出它们的特点。
    连接数据库主要有哪几个对象
  • 原文地址:https://www.cnblogs.com/zander/p/2593115.html
Copyright © 2011-2022 走看看