您的位置 首页 开关

linux内核中的typeof

内核版本:2614今天分析内核时又看到了typeof,只知道它大概是返回变量的类型,后来上网查了下发现这个关键字在linux中用的非常多。如果

内核版别:2.6.14

今日剖析内核时又看到了typeof,只知道它大概是回来变量的类型,后来上网查了下发现这个关键字在linux顶用的十分多。假如你对sizeof很熟悉的话,那么大可进行类推,sizeof(exp)回来的是exp的数据类型巨细,那么typeof(exp.)回来的便是exp的数据类型。下面是linux内核中typeof的一些比如。

include/linux/kernel.h

[plain]view plaincopy

print?

  1. /*
  2. *min()/max()macrosthatalsodo
  3. *stricttype-checking..Seethe
  4. *”unnecessary”pointercomparison.
  5. */
  6. #definemin(x,y)({\
  7. typeof(x)_x=(x);\//_x的数据类型和x相同
  8. typeof(y)_y=(y);\
  9. (void)(&_x==&_y);\
  10. _x<_y?_x:_y;})
  11. #definemax(x,y)({\
  12. typeof(x)_x=(x);\
  13. typeof(y)_y=(y);\
  14. (void)(&_x==&_y);\

linux/include/asm-arm/uaccess.h

[plain]view plaincopy

print?

  1. #defineget_user(x,p)\
  2. ({\
  3. constregistertypeof(*(p))__user*__pasm(“r0”)=(p);\//__p的数据类型和*(p)的指针数据类型是相同的,__p=p
  4. registertypeof(*(p))__r2asm(“r2”);\//__r2的数据类型和*(p)的数据类型是相同的
  5. registerint__easm(“r0”);\
  6. switch(sizeof(*(__p))){\
  7. case1:\
  8. __get_user_x(__r2,__p,__e,1,”lr”);\
  9. break;\
  10. case2:\
  11. __get_user_x(__r2,__p,__e,2,”r3″,”lr”);\
  12. break;\
  13. case4:\
  14. __get_user_x(__r2,__p,__e,4,”lr”);\
  15. break;\
  16. case8:\
  17. __get_user_x(__r2,__p,__e,8,”lr”);\
  18. break;\
  19. default:__e=__get_user_bad();break;\
  20. }\
  21. x=__r2;\
  22. __e;\
  23. })

下面写一个小程序示例一下:

[plain]view plaincopy

print?

  1. #include
  2. typedefstruct
  3. {
  4. intx;
  5. chary;
  6. }astruct,*pastrcut;
  7. intmain()
  8. {
  9. intsizem,sizew;
  10. intx=3;
  11. typeof(&x)m=&x;
  12. sizem=sizeof(m);
  13. *m=5;
  14. typeof(((astruct*)5)->y)w;
  15. sizew=sizeof(w);
  16. w=”a”;
  17. return1;
  18. }

首先看main函数里的m变量,这个变量的类型便是typeof(&x), 因为x是int型的(这儿与x是否被赋值一点联系都没有),所以&x应该是int *类型,那么typeof(&x)回来的类型便是int*,所以m天然也便是个int*类型的。

然后咱们看w变量,其类型是 typeof(((astruct *)5)->y), 其间astruct是一个被界说的结构类型,其间的y元素是char类型,那么((astruct *)5)->y是啥意思呢?在这儿5并不是真实的变量,能够把它理解为一个代替运用的符号,当然这个符号最好是一个数,其意思更能够理解为一个被赋值了的变量,这个数能够是0,3,也能够是8也能够随意什么都能够。那么((astruct *)5)->y只是便是表明了y这个变量,所以typeof的成果便是y元素的类型,也便是char。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/kaiguan/262399.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部