搜索
bottom↓
回复: 11

关于arm代码里一段不懂的,求解释;

[复制链接]

出0入0汤圆

发表于 2015-9-7 17:30:21 | 显示全部楼层 |阅读模式
#ifndef __KBI_H_
#define __KBI_H_       

#ifdef  __KBI_C_
#define KBI_EXT
#else
#define KBI_EXT extern

#endif



红色字体这个是什么意思啊?希望大家能帮我解释一下  谢谢

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2015-9-7 17:33:20 | 显示全部楼层
KBI_EXT INT8U KeyNow;

出50入58汤圆

发表于 2015-9-7 17:58:56 | 显示全部楼层
KBI.h肯定会被多次应用,第一次KBI_EXT INT8U KeyNow经过预编译变成INT8U KeyNow,第二个文件经过预编译就变成extern INT8U KeyNow了

出870入263汤圆

发表于 2015-9-7 18:03:07 | 显示全部楼层
给你下面三个示例文件:kbi.h, kbi.c, other.c

kbi.h
  1. #ifndef __KBI_H_
  2. #define __KBI_H_

  3. #ifdef  __KBI_C_
  4. #define KBI_EXT
  5. #else
  6. #define KBI_EXT extern
  7. #endif


  8. KBI_EXT int a;
  9. KBI_EXT int b;
  10. KBI_EXT int c;

  11. #endif /* __KBI_H_ */
复制代码

kbi.c
  1. #define __KBI_C_
  2. #include "kbi.h"

  3. int get_a(void){
  4.   return a;
  5. }
复制代码



other.c
  1. #include "kbi.h"

  2. int use_c(void){
  3.   return c;
  4. }
复制代码


解释:
由于kbi.h是公共头文件,可以在多个C文件中用include包含。有了KBI_EXT这样的定义,就可以保证只在一个C文件(这里举例的是kbi.c)定义变量,而在其它C文件中只是引用。这样即方便变量的管理又可以避免重定义错误。

出0入0汤圆

发表于 2015-9-7 20:13:33 | 显示全部楼层
armstrong 发表于 2015-9-7 18:03
给你下面三个示例文件:kbi.h, kbi.c, other.c

kbi.h

然而并没有什么卵用,全用extern没问题的

出870入263汤圆

发表于 2015-9-7 22:55:00 | 显示全部楼层
liurangzhou 发表于 2015-9-7 20:13
然而并没有什么卵用,全用extern没问题的

这只是一种代码的写法(风格),不是必须的。我也没这个习惯,只是解答楼主的问题而已。
请参见uC/OS-II的源代码,它就是用这种风格的。

出0入0汤圆

 楼主| 发表于 2015-9-8 06:16:07 | 显示全部楼层
非常感谢大家的回答

出0入0汤圆

发表于 2015-9-8 13:36:03 | 显示全部楼层
armstrong 发表于 2015-9-7 18:03
给你下面三个示例文件:kbi.h, kbi.c, other.c

kbi.h

原来如此。。。
一看代码,就清楚了。

出0入0汤圆

发表于 2015-9-8 14:06:21 来自手机 | 显示全部楼层
这种写法挺好的

出0入4汤圆

发表于 2015-9-10 15:40:55 | 显示全部楼层
选择编译,宏定义

出0入0汤圆

发表于 2015-9-15 23:26:38 | 显示全部楼层
liurangzhou 发表于 2015-9-7 20:13
然而并没有什么卵用,全用extern没问题的

这样kbi.c文件里就不用写a,b,c三个变量的定义了,增加或修改全局变量也只需修改kbi.h就可以了

出0入0汤圆

发表于 2015-9-15 23:51:22 | 显示全部楼层
blxy 发表于 2015-9-15 23:26
这样kbi.c文件里就不用写a,b,c三个变量的定义了,增加或修改全局变量也只需修改kbi.h就可以了 ...

你关注的不在重点,它这里重点是有extern和没有extern
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-3 15:34

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表