IE盒子

搜索
查看: 215|回复: 5

C语言能实现一个全局变量,只允许变一次吗?

[复制链接]

3

主题

5

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2022-11-25 12:31:15 | 显示全部楼层 |阅读模式
要在程序运行时修改,不是直接初始化。
回复

使用道具 举报

3

主题

5

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2022-11-25 12:31:20 | 显示全部楼层
要一个变量只能被写一次,肯定要封装,给它藏起来。
#include <stdio.h>

#define GVAR gvar(0, 0)
#define GVAR_INIT(n) gvar(n, 1)
int gvar(int n, int op)
{
    static int var, flag;
    if(!flag && op){
        var = n;
        flag = 1;
    }
    return var;
}

int main(void)
{
    int m;
   
    GVAR_INIT(100);
    GVAR_INIT(200);
    m = GVAR;
    printf("m=%d", m);   
   
        return 0;
}麻烦点,使用时读写要分开,新增一个这样的,就得写上面的好几行。
把变量限制在函数内部,这样外面就改不了,会不会好点?
回复

使用道具 举报

2

主题

5

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2022-11-25 12:32:01 | 显示全部楼层
加个全局bool值作为是否修改的标志,修改后就把bool值从false改为true。然后判断bool值是否变化就行。
回复

使用道具 举报

3

主题

5

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2022-11-25 12:32:46 | 显示全部楼层
全局变量可以变化多次,这个和初始值是没有依赖关系的,给一个用例给你参考:
int globalValue = 100; // 全局变量
int main() {
  printf("1. globalValue = %d \n", globalValue);
  if (globalValue == 100) {
    globalValue = 1;
    printf("2. globalValue = %d \n", globalValue);
  }
  globalValue = 110;
  printf("3. globalValue = %d \n", globalValue);
}
/**
输出的结果是这样的,运行过程被修改了两次,最终全局变量的值为110
1. globalValue = 100
2. globalValue = 1
3. globalValue = 110
**/
回复

使用道具 举报

2

主题

5

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2022-11-25 12:33:15 | 显示全部楼层
可以初始化的时候给一个特殊值 ,在修改时判断是否为这个特殊值,只有等于特殊值时才能被修改。
回复

使用道具 举报

2

主题

7

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2022-11-25 12:33:45 | 显示全部楼层
可以! 再增加一个全局变量,用于记录是否修改了值.
#include <stdio.h>

int value;
int flag = 0; //记录全局变量是否修改的标志值

void setValue(int x)
{
  if(flag ==0) //仅当标志值为0时,才修改全局变量
  {
    value = x;
    flag = 1; //修改全局变量后,同时修改标志值
  }
}
int main(void)
{
  printf("原值:%d\n",value);

  setValue( 5 );
  printf("第一次修改:%d\n",value );

  setValue( 20 ); //第二次修改不能成功
  printf("第二次修改:%d\n",value );

  return 0;
}



运行结果:

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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