• 详解keil采用C语言模块化编程时全局变量、结构体的定义、声明以及头文件包含的处理方法


    一、关于全局变量的定义、声明、引用:

    只要是在.h文件中定义的变量,然后在main.c中包含该.h文件,那么定义的变量就可以在main函数中作为全局变量使用

    方法1:

    在某个c文件里定义全局变量后,在其它c文件要用,则在要用c文件里用extern进行声明。说来轻巧但还是很多同学会出问题。请看下面注意事项方可解决!

    注:

    (1)在定义全局变量时可同时将其初始化

    (2)在用extern声明时不能再初始化,否则编译器报错

    举例:有两个c文件分别为one.c和two.c,two中要用到one中的全局变量N,怎么办?

    答案:在one.c中定义且初始化:u8 N = 0;

               再在two.c中声明:extern u8 N;(注:此处不能加= 0)

     

    方法2:

    同样对于方法1中的例子,我推荐采用方法2。

    答案:在one.c中定义且初始化:u8 N = 0;

               再在one.h中用extern声明:extern u8 N;(注:此处不能加= 0)           

               最后在two.c中包含one.h:#include "one.h"     

    由于方法2的可移植性较方法一要强,故采用2较好!

    对方法2的总结为:全局变量的定义和初始化放在c文件中,声明放在对应的h文件中。 且要注意h文件里应仅有

    相应c文件里的函数和变量的声明,和相应c文件无关的东西不应该有。

     

    二、关于头文件的包含:

            头文件的包含就比较简单了:在相应c文件里一一包含所需的h文件即可。但千万不要将这些头文件全部放在c文件的相应头文件里,虽然这样会使c文件仅包含了一个头文件,看起来比较简洁,但这样会影响它的h文件的“纯洁性”。              

            在此提醒下新手们:要将c文件和其对应的h文件看成一体,即它们互相有着紧密联系;移植时,将它们同时搬走就行!

     

     

    三、关于结构体类型的定义:

            1、若结构体类型只需要在某个c文件中使用,那么就在相应c文件里定义该结构体即可。

            2、若结构体类型要在多个c文件中使用,那么就应该在头文件中定义该结构体,再在要用它的文件中包含结构体定义 所在的头文件即可。

     

     

  • 相关阅读:
    Java基础——链表的添加、移除、反转
    Java基础——数组队列的原理和实现
    Java基础——String、StringBuiler、StringBuffer的用法和区别
    Java基础——解决JFrame.setBackground设置无效,mac系统IDEA编译器
    Java基础——文件查找创建删除
    Java基础——Java异常机制
    线性表的操作
    Linux目录及文件系统操作
    Linux用户及文件权限管理
    Linux日志系统
  • 原文地址:https://www.cnblogs.com/prayer521/p/4069050.html
Copyright © 2020-2023  润新知