【问题标题】:one static variable to multiple copies一个静态变量到多个副本
【发布时间】:2018-03-25 04:32:56
【问题描述】:

有没有办法让静态变量在 C/C++ 中有多个副本?

以下代码有一个静态变量 - 英里。如何实现 runner1() 和 runner2() 有自己的里程副本但保持里程为静态?

测试.h

static int miles;
extern int get_miles();

test.c

#include "test.h"

int get_miles() {
   miles = miles + 1;
   return miles;
}

用户.c

#include <stdio.h>
#include "test.h"

extern void runner1();
extern void runner2();

void runner1() {
   int i;
   for(i=0;i<5;i++) {
      printf("runner1 runs %0d miles\n", get_miles());
   }
}

void runner2() {
   int j;
   for(j=0;j<5;j++) {
      printf("runner2 runs %0d miles\n", get_miles());
   }
}

int main() {
  runner1();
  runner2();
}

https://www.edaplayground.com/x/3G7h

【问题讨论】:

  • 您必须将runner1()runner2() 放在不同的文件中,并且每个文件都需要自己的get_miles()(在同一个文件中)。但感觉这里有一个XY Problem。你为什么要这样做?至少看起来有些荒谬。 (顺便说一句,%0d 也可能是 %d。)此外,您应该选择两种语言中的一种:C++ 中存在一些不属于 C 的选项。
  • 使用两个函数,get_miles1() 和 get_miles2(),以及两个静态计数器。
  • 一个static变量中不能同时有两个不同的值。
  • 所以...你想要相同的函数get_miles(),不带参数,在runner2调用时做不同的事情而不是从runner1调用?
  • 这将是很容易破坏的非常脆弱的代码。在 .h 文件中声明静态是一个非常糟糕的主意。 .h 文件的重点是为 .c 文件提供一种可靠的方式来保证它们都同意通用符号。这就是外部定义的所在;静态定义(本质上是 .c 文件的本地)属于 .c 文件。我不明白为什么当您为每个跑步者制定例行程序时,您为什么要将里程保持为任何形式的全球性;也不是为什么您希望该变量是静态的。为什么不在 runner1()/runner2() 中打印 i 和 j?模块化编码让生活变得轻松

标签: c++ c variables static


【解决方案1】:

这是矛盾的:你想要两个不同的东西同时相等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 2021-05-19
    • 2014-02-03
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多