gpt4 book ai didi

c - 静态变量有什么错误吗?

转载 作者:行者123 更新时间:2023-12-03 07:30:01 27 4
gpt4 key购买 nike

我有一个关于程序的问题。我敢打赌这与我使用静态有关。这是我的

static int  cnt;

void f();

我的main.c

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

void main()
{
cnt=0;
printf("before f : cnt=%d\n",cnt);
f();
printf("after f : cnt=%d\n",cnt);
}

最后是我的f.c

#include "t.h"


void f()
{
cnt++;
}

printf 两次打印 cnt=0。当我做cnt++时,这怎么可能?有任何想法吗?

提前致谢

最佳答案

C中,static表示“模块本地”

请注意,#include 语句只是将头文件粘贴到包含文件中。
因此,您将在不同的模块中创建两个不同的符号(恰好具有相同的逻辑名称)。
f.c cnt 是一个与 main.c 不同的 cnt

注意:C 中的 staticC++ 中的 static 具有不同的含义。
并且由于 C++C 兼容,因此类外部的 staticC 中的含义相同

编辑:
在你的情况下,你不需要一个static,你想要一个变量,但我猜你在链接器告诉你“不明确的符号”时遇到了问题。

我建议在头文件中声明一个extern,并在模块中声明实际变量。

t.h   extern int cnt; // declaration of the variable cntmain.cpp  #include   #include "t.h"  void main()  {     cnt=0;     printf("before f : cnt=%d\n",cnt);     f();     printf("after f : cnt=%d\n",cnt);  }t.cpp    #include "t.h"    int cnt = 0; // actual definition of cnt        void f()    {        cnt++;    }

关于c - 静态变量有什么错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55883494/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com