zoukankan      html  css  js  c++  java
  • iOS 中 typedef 和 define 理解

    转自http://www.jianshu.com/p/b932b339da8d

    1. typedef 类型定义

    简单地说就是给对应类型改个名字。

    typedef double doubleA;  //给double取别名为doubleA
    typedef struct Man
    {
        NSString *name 
    }Oldman;  //给man结构体取别名为Oldman。[使用: Oldman m = {"hah"};]
    typedef void(^HBlock) (int a,int b); //给block取别名HBlock

    2. define 宏定义

    作用:文本替换(把出现的替换为定义的)。

    #define MyString @"Hello World !"  //MyString替换后面的文本
    #define MyString2 MyString  //MyString2替换MyString

    3. typedef 和 define 使用注意

    • define 是文本替换,属于预编译指令,本身不参与编译,除非希望替换的文本中有;否则不用加。
      typedef 是类型替换,语句的一种,结尾必须有;
    • define 写在方法/函数中则作用域从写的地方开始有效,直至使用#undef(不写此指令则后面一直有效)。typedef 写在方法/函数中则作用域 只在此方法/函数中有效。
    • 若使用typedef char * MyString;则 MyString s1,s2 等价于  char *s1; char *s2
      若使用 #define MyString char * 则 MyString s1,s2 等价于 char *s1,s2 即 char *s1; char s2
      再次说明了typedef是类型替换,直接参与编译,而define只是简单的文本替换。

    其他typedef 使用示例
    int add (int a, int b)
    {
         return a + b;
    }
    
    typedef int(*MyMethod) (int a,int b);
    
    int main()
    {
        MyMethod m = add;
        m(5,6);   //调用函数
    
        return 0;
    }
    
    //定义
    typedef void(^Result)(NSError *error, NSDictionary *resultDic);
    + (void)networkAccess:(Result)resultBlock;
    //其他界面调用的时候直接就能提示出完整的block

     

  • 相关阅读:
    Java 基础
    Java 数据类型
    Spring 拦截器实现事物
    SSH 配置日记
    Hibernate 知识提高
    Jsp、Servlet
    leetcode 97. Interleaving String
    leetcode 750. Number Of Corner Rectangles
    leetcode 748. Shortest Completing Word
    leetcode 746. Min Cost Climbing Stairs
  • 原文地址:https://www.cnblogs.com/liuting-1204/p/6409029.html
Copyright © 2011-2022 走看看