zoukankan      html  css  js  c++  java
  • C语言-typedef和#define

    1、关键字 typedef

    为一个数据类型起一个新的别名,typedef 的用法一般为:

    typedef OldName NewName;

    需要强调的是,typedef 是赋予现有类型一个新的名字,而不是创建新的类型。

    2、宏定义 #define

    #define 定义一个标识符来表示一个常量(变量名表示的是一个变量,但宏名表示的是一个常量。可以给变量赋值,但绝不能给常量赋值)。其特点是:定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了。#开头的指令都属于预处理指令。

    #define  标识符  常量   //注意, 最后没有分号

    宏所表示的常量可以是数字、字符、字符串、表达式。其中最常用的是数字。

    宏定义最大的好处是“方便程序的修改”。使用宏定义可以用宏代替一个在程序中经常使用的常量。

    3、typedef 和 #define的区别 (助记:typedef为前面的数据类型起别名,#define为后面的常量做宏定义)

    typedef 在表现上有时候类似于 #define,但它和宏替换之间存在一个关键性的区别。正确思考这个问题的方法就是把 typedef 看成一种彻底的“封装”类型,声明之后不能再往里面增加别的东西。宏定义就是一种替换。

    1) 可以使用其他类型说明符对宏类型名进行扩展,但对 typedef 所定义的类型名却不能这样做。如下所示:

    #define INTERGE int
    unsigned INTERGE n;  //没问题
    
    typedef int INTERGE;
    unsigned INTERGE n;  //错误,不能在 INTERGE 前面添加 unsigned

    2) 在连续定义几个变量的时候,typedef 能够保证定义的所有变量均为同一类型,而 #define 则无法保证。例如:

    #define PTR_INT int *
    PTR_INT p1, p2;

    经过宏替换以后,第二行变为:

    int *p1, p2;

    这使得 p1、p2 成为不同的类型:p1 是指向 int 类型的指针,p2 是 int 类型。

    相反,在下面的代码中:

    typedef int * PTR_INT
    PTR_INT p1, p2;

    p1、p2 类型相同,它们都是指向 int 类型的指针。


    学习参考:http://c.biancheng.net/view/2040.html

  • 相关阅读:
    containerd
    0/1 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }
    failed to pull image k8s.gcr.io/kube-controller-manage
    journalctl
    How to use Kata Containers and CRI (containerd plugin) with Kubernetes
    kubelet kubeadm kubectl install
    make an overlay with mount
    2018-2-13-不使用数据结构反转栈
    2018-8-10-卷积神经网络全面解析
    论分布式系统内的节点坏盘感知
  • 原文地址:https://www.cnblogs.com/lemonzhang/p/12312459.html
Copyright © 2011-2022 走看看