Chinaunix

标题: linux中的1UL不知道是什么意思 [打印本页]

作者: zhanghuafeng25    时间: 2013-04-23 11:28
标题: linux中的1UL不知道是什么意思
linux2.6中的1UL不知道是什么意思,用软件也没有查到它是在什么地方定义的,这个变量是不是属于特殊变量,系统自定义的?
作者: T-Bagwell    时间: 2013-04-23 12:48
unsigned long?
作者: uliux    时间: 2013-04-23 12:56
楼上正解!
作者: 瀚海书香    时间: 2013-04-23 13:21
回复 1# zhanghuafeng25
默认常量是int型,这里指定为unsigned long型。

   
作者: daniel_11    时间: 2013-04-23 14:02
这问题cu大牛和版主耐心回答,应该加分
作者: txdgtwpv    时间: 2013-04-23 18:12
内牛满面,终于在内核版看到一个我会的东西了
作者: zhanghuafeng25    时间: 2013-04-24 09:56
我想问一下,它是在什么地方定义的,我怎么找不到?
回复 4# 瀚海书香


   
作者: uliux    时间: 2013-04-24 18:07
回复 7# zhanghuafeng25

亲  这个UL貌似是c语言的规范,你在内核代码中找个啥呢?????你先得看看c语言有这个UL没,哈哈!


另外在内核中有一个UL()的宏是和UL的作用错不多,这个宏在arch/arm/include/asm/memory.h中,
这个宏中的_AC()就是其实就是利用了gcc的c规范中的两个##链接的规则将一个数字转化为unsigned long类型的,这个你倒是可以研究一下!
   
作者: zhanghuafeng25    时间: 2013-04-25 16:04
谢谢你的回答,我想再问一下,你讲的C语言规范的电子资料那里能下载到,能否跟我讲一下下载地址,中文的最好,我找了半天也没有找到!回复 8# uliux


   
作者: uliux    时间: 2013-04-25 17:23
我说的c语言的规范是C99或者编辑器的约定俗成的用法,要靠你慢慢积累的,哪有书我也想看看呢!
作者: daniel_11    时间: 2013-04-25 18:19
uliux 发表于 2013-04-25 17:23
我说的c语言的规范是C99或者编辑器的约定俗成的用法,要靠你慢慢积累的,哪有书我也想看看呢!

C99标准网上大把。。。
作者: a-plus    时间: 2013-04-25 20:11
长见识了。
作者: daniel_11    时间: 2013-04-25 21:20
能从UL扯到C99,CU治学严谨
作者: uliux    时间: 2013-04-25 21:55
回复 13# daniel_11


    码农也是要开心的,不能整天苦个脸!!!!
作者: l4rmbr    时间: 2013-05-07 22:56
本帖最后由 l4rmbr 于 2013-05-07 23:06 编辑

*** 短答案 ***

这是C语言中标记整数常量的标识, UL表示说这个1是一个unsigned long 的常量(因为1是在unsigned long
的表示范围之内)

*** 长答案 ***

具体地, C标准规定: 整数常量的类型是第一个可以表示该数值的整型. 比如, 1不加UL的
话, 默认地它的类型是int, 这是一个有符号类型哦. 而内核中为了限制说这个值是个无符号的
值, 就明确地标出UL,表示:

这是个1, 它能被一个unsigned long 类型的整型表示, 所以它的类型就是unsigned long,
你(编译器)不需要费心再为我去推算它的类型了. 

另附, C标准中关于一个整数是如何决定它类型的优先级表:

后缀       类型
无         int
                       long int
                       long long int

u or U              unsigned int
                       unsigned long int
                       unsigned long long int

l or L               long int
                       long long int

ul or UL          unsigned long int
                       unsigned long long int

ll or LL           long long int

ull or ULL       unsigned long long int

注意, 在上表中,比如对u, 则编译器依次判断常量值是否在unsigned int表示范围内, 是类型就是unsigned int, 
否则, 是否在unsigned long int表示范围内, 是类型就是unsigned long int,
否则, 是否在unsigned long long int表示范围内, 是类型就是unsigned long long int.

其余一样道理.

更详细请参考C99标准:
ISO/IEC 9899:1999(草案) 6.4.4.1 Integer constants



作者: l4rmbr    时间: 2013-05-07 23:02
瀚海书香 发表于 2013-04-23 13:21
回复 1# zhanghuafeng25
默认常量是int型,这里指定为unsigned long型。


默认是什么类型还得看这个常量值多大.




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2