ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

全局变量引用与声明

2021-04-18 18:04:03  阅读:228  来源: 互联网

标签:头文件 dice int sides 引用 extern 全局变量 声明 roll


最近在看C Primer Plus 12.5章节,发现一段样例代码使用的全局变量,再次记录一下

简而言之:

1. 在.c源文件定义全局变量

2. 在.h头文件用extern声明这个全局变量

3. 如果其他.c文件需要使用这个全局变量,只要包含头文件就可以了,不用在c文件重新extern声明这个变量,extern声明可以有无限多个,头文件有一个就够用了!

 

总结下:(拷贝之前博文的内容)

对变量而言,如果你想在本源文件中使用另一个源文件的变量,就需要在使用前用extern声明该变量,或者在头文件中用extern声明该变量;

对函数而言,如果你想在本源文件中使用另一个源文件的函数,就需要在使用前用声明该变量,声明函数加不加extern都没关系,所以在头文件中函数可以不用加extern。

C程序采用模块化的编程思想,需合理地将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求,在模块的划分上主要依据功能。模块由头文件和实现文件组成,对头文件和实现文件的正确使用方法是:
规则1 头文件(.h)中是对于该模块接口的声明,接口包括该模块提供给其它模块调用的外部函数及外部全局变量,对这些变量和函数都需在.h中文件中冠以extern关键字声明;
规则2 模块内的函数和全局变量需在.c文件开头冠以static关键字声明;

 

规则4 如果要用其它模块定义的变量和函数,直接包含其头文件即可。
许多程序员喜欢这样做,当他们要访问其它模块定义的变量时,他们在本模块文件开头添加这样的语句:
extern int externVar; 
抛弃这种做法吧,只要头文件按规则1完成,某模块要访问其它模块中定义的全局变量时,只要包含该模块的头文件即可。

 

diceroll.c

#include "diceroll.h"
#include <stdio.h>
#include <stdlib.h>
int roll_count = 0; // 定义全局变量

static int rollem(int sides)
{
    int roll;

    roll = rand() % sides + 1;
    ++roll_count;
    return roll;
}

int roll_n_dice(int dice, int sides)
{
    int d;
    int total = 0;
    if (sides < 2)
    {
        printf("need at least 1 die.\n");
        return -2;
    }
    if (dice < 1)
    {
        printf("need at lease 1 die.\n");
        return -1;
    }
    for (d = 0; d < dice; d++)
    {
        total += rollem(sides);
    }

    return total;
}

 

diceroll.h

extern int roll_count;//全局变量 声明

int roll_n_dice(int dice, int sides);

 

manydice.c

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include "diceroll.h" //为 函数roll_n_dice()提供原型,为变量roll_count提供声明

int main()
{
    int dice, roll;
    int sides;

    srand((unsigned int)time(0));

    printf("enter the number of sides per die, 0 to stop.\n");

    while (scanf_s("%d", &sides) == 1 && sides > 0)
    {
        printf("how many dice?\n");
        scanf_s("%d", &dice);

        roll = roll_n_dice(dice, sides);
        printf("you have rolled a %d using %d %d-sided dice.\n", roll, dice, sides);

        printf("how many sides? enter 0 to stop.\n");
    }
    printf("the rollem() func was called %d times.\n", roll_count); //使用外部变量
    printf("good fortune to you!\n");
    return 0;

}

 

标签:头文件,dice,int,sides,引用,extern,全局变量,声明,roll
来源: https://www.cnblogs.com/focus-z/p/14674043.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有