• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

进行宏定义常量时 为什么要用描述符unsigned int

_落雪千寒灬 2018-04-14 浏览量:1589
比如#define A (unsigned int)0 有些是#define B (unsigned char)0 还有些用了十六进制#define C (unsigned char)0x00 这些用法和普通的#define D 0​相比有什么特点
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 这样加了强制类型 可以使得代码更健壮

    1. 确定数据的长度、类型,而不是依赖编译系统默认(这样在移植时不容易出错)

    2. 方便后面的调试检测、因为有了强制类型,一些错误容易在编译时暴露出来

    • 发布于 2018-04-14
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:12
  • #define 本质就是宏替换,你要看看你在替换处的代码需要怎么处理,如果需要强制类型转换,你就在定义的时候加个强制类型转换
    • 发布于2018-04-14
    • 举报
    • 评论 4
    • 0
    • 0
_落雪千寒灬 回复了 skawu :替换一个常量 为什么会用到强转类型 回复
_落雪千寒灬 回复了 skawu :替换后相当于给变量赋常量值 在给变量赋常量值的时候 你会给常量加个强转类型吗 比如 a = (unsigned int)0 回复
skawu 回复了 _落雪千寒灬 :你的0这个常量占多少字节,char?int?long?你不定义编译器怎么知道 回复
_落雪千寒灬 回复了 skawu :这个变量在声明时已经说明了 回复

  • 当然有区别的,#define A (unsigned int)0 他是一个int 类型的无符号数,会占用4 字节。很明确的数据类型。#define D 0  这个仅仅是定义一个0,如果把 D​ 赋值为一个位变量,那么他就是一个bit类型的0,如果把 D 赋值给一个 (unsigned char) 变量,那他就是一个(unsigned char) 类型的0,​如果把他赋值给一个 (unsigned int)变量​,那它就是 (unsigned int) 类型的0​。内存里的数据不一样,占用不一样
    • 发布于2018-04-14
    • 举报
    • 评论 0
    • 0
    • 0

  • #define定义的宏的会在编译的时候由编译系统替换掉,它完成的工作就是在把有A的地方换成(unsigned int)0 ,就是简单的替换,没有其它更多的操作。


    至于为什么加(unsigned int),0是整型的常量,在系统中实际上是int型,加了(unsigned int)​强制转换,减少了以后运算时的自动转换
    • 发布于2018-04-14
    • 举报
    • 评论 0
    • 0
    • 0

  • unsigned int是无符号32位整数,其实实际应用中int型很少会用到31位这么多的,无符号32位整数的范围是0~+32位整数,而有符号32位整数的范围是-31位整数~+31位整数,范围不同。楼主去复习一下计算机组成原理,看看无符号32位整数和有符号的有什么区别。

    • 发布于2018-04-14
    • 举报
    • 评论 2
    • 0
    • 0
_落雪千寒灬 回复了 donatello :宏定义常量时用 用这种强转类型 和不用 有什么区别 回复
donatello 回复了 _落雪千寒灬 :都说了,用不用强制转换取决于你的宏定义所要用的数到底是无符号还是有符号的,不用强制转换的时候默认就是有符号的,加了无符号的强制转换就是无符号的。 回复

  • 其实是一个强制类型转换,将这个数设为int型或者char型   例如:#define D (unsigned char)123    unsigned int i=123;i=D*i;                                #define D 123    unsigned int i=123; i=D*i;你把两次计算出来的i值对比一下就明白了。
    • 发布于2018-04-14
    • 举报
    • 评论 0
    • 0
    • 0

  • 宏定义如果不加类型定义的话,可以定义为任意数而不会报错,只有在进行计算的时候会出现区别,加了类型定义后,数值是只能在所定义的类型范围内,如果溢出,则按照溢出值计算,并且在定义了类型后,与其他数值进行计算时,与该数值计算的前后顺序不同,也可能会导致最终结果的不同,这个可以在C编译器上自己尝试下
    • 发布于2018-04-14
    • 举报
    • 评论 0
    • 0
    • 0

  • 这样就限制了定义的数字的长度,占用的字节数,对于程序安全而言很重要
    • 发布于2018-04-14
    • 举报
    • 评论 0
    • 0
    • 0

  • 就是指定数据类型,方便某些函数要求的参数要求
    • 发布于2018-04-14
    • 举报
    • 评论 0
    • 0
    • 0

  • 好花哨的define,既然要定义数据类型,为什么不用const方法来定义常量
    • 发布于2018-04-14
    • 举报
    • 评论 0
    • 0
    • 0

  • 只是指定了该变量的类型,没什么特别的作用
    • 发布于2018-04-15
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

进行宏定义常量时 为什么要用描述符unsigned int