搜索
bottom↓
回复: 6

关于模块化程序写法问题

[复制链接]

出50入0汤圆

发表于 2013-3-6 01:10:10 | 显示全部楼层 |阅读模式
看到一段头文件代码如下:


#ifndef KEY_H                                           // 1
#define KEY_H  1                                      // 2
  #ifndef KEY_GLOBAL                              // 3
    #define KEY_EXT extern                       //4
  #else                                                 //5
    #define KEY_EXT                            //6
  #endif
  #include "Include.h"
  //-------------用户使用设置-----------------------------

  #define key_line_L1        P1_0       //键盘的第一行端口定义
  #define CAN_REPEAT      0        //是否允许重复按键: 允许为1;不允许为0

  KEY_EXT void  key_init(void);
  KEY_EXT uchar get_key_value();
  KEY_EXT void  keyDelay_us(uint us); //毫秒级延时

#endif



能否请有经验的前辈帮解释一下注释的1,2,3,4,5,6,分别代表什么意义;
为什么头文件要这样写呢?
多谢

出0入0汤圆

发表于 2013-3-6 08:00:32 | 显示全部楼层
KEY_EXT根据KEY_GLOBAL 是否被定义,而定义成extern或者是空。仅此而已。就是一些预编译的条件,

出50入0汤圆

 楼主| 发表于 2013-3-6 08:11:51 | 显示全部楼层
tiancaigao7 发表于 2013-3-6 08:00
KEY_EXT根据KEY_GLOBAL 是否被定义,而定义成extern或者是空。仅此而已。就是一些预编译的条件, ...

KEY_EXT  定义为空和定义为extern  效果不是一样的么,都在头文件中的声明函数;这样是不是画蛇添足呢?

出0入264汤圆

发表于 2013-3-6 08:30:31 | 显示全部楼层
不一样。在多文件编译时候,extern指示该变量或函数,在其它模块中存在。

出50入0汤圆

 楼主| 发表于 2013-3-6 09:08:57 | 显示全部楼层
jswd0810 发表于 2013-3-6 09:03
#define KEY_H  1                                      // 2
这个好像没有看见过,一般后面都没有带后面1 ...


前两天买了本<51开发实战手册>,见里面的关于头文件全是这种风格,感觉很怪异的写法;
可能是自己少见吧

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-3-6 09:26:17 来自手机 | 显示全部楼层
1、2可以防止重复包含头文件导致的重复定义警告。
3、4、5、6是为了在头文件里面定义一次、声明多次变量。见ucos的书,里面有介绍。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-4 01:40

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

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