为什么这段代码提示我一个未知的外部变量




```#include <stdio.h>

void function1()
{
    static int num = 10; // 在函数1中定义静态变量
    printf("function1: num = %d\n", num);
    num++; // 修改静态变量的值
}

void function2()
{
    extern int num; // 声明函数1中定义的静态变量
    printf("function2: num = %d\n", num);
}

int main()
{
    function1(); // 调用函数1
    function2(); // 调用函数2,它使用了函数1中定义的静态变量
    function1(); // 再次调用函数1
    return 0;
}
**


static int num = 10; // 在函数1中定义静态变量 你在方法1中定义的静态变量不是只能在方法1中使用么,你就把这个放到最外面就行了

img

static int num = 10;是局部变量

对于单个源文件的程序,如果某个全局变量不是在文件开头定义,而是在中间某个位置,那么如果在定义位置之前的函数想使用这个全局变量,则可以采用extern来声明变量。将题主的代码稍作修改,供参考:

#include <stdio.h>
void function1()
{
    extern num; // 修改 声明外部变量
    printf("function1: num = %d\n", num);
    num++; // 修改静态变量的值
}

void function2()
{
    extern  num; // 修改 声明外部变量
    printf("function2: num = %d\n", num);
}
 
int main()
{
    function1(); // 调用函数1
    function2(); // 调用函数2,它使用了函数1中定义的静态变量
    function1(); // 再次调用函数1
    return 0;
}

static int num = 10;  // 在主函数结束外定义静态变量

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/794161
  • 这篇博客你也可以参考下:编写程序,读取文件的内容并在屏幕上显示出来
  • 除此之外, 这篇博客: 如何优雅地处理命令行参数?中的 外部变量 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 它有四个外部变量,含义分别如下:

    • optind 存放下一个要处理的字符串在argv数组中的下标,从1开始
    • opterr 如果选项发生错误,getopt会打印出错消息,如果设置为0,则不打印。
    • optopt 如果选项处理发生错误,它会指向导致出错的选项字符串
    • optarg 如果一个选项需要参数,如前面提到的n参数,由于后面有:,所以它需要参数,处理到它时,optarg会指向这个参数。
  • 您还可以看一下 张云波老师的以太坊智能合约项目实战课程中的 代码正确性检查和部署小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    问题中提到的“使用了未知的外部变量”通常是指在代码中引用了未定义或未声明的变量。这可能是因为以下几个原因:

    1. 变量未声明:在使用变量之前,应该首先声明变量。在Python中,声明变量的方式是将其赋值为一个初始值。如果没有声明变量,直接引用该变量会导致未知外部变量的错误。

    2. 变量作用域问题:在Python中,变量的作用域是根据变量在代码中定义的位置确定的。如果变量是在一个函数内部定义的,则它的作用域只限于函数内部。如果在函数内部引用一个在函数外部定义的变量,会导致未知外部变量的错误。

    解决这个问题的方法通常是检查代码中的变量声明和作用域,并确保所有变量都被正确声明和定义。以下是一些可能的解决方案:

    1. 检查变量声明:确保在使用变量之前先声明变量,并为其赋予一个初始值。例如,在问题描述的代码中,检查是否在使用变量之前已经声明了变量n、mid和last。

    2. 检查变量作用域:确保在引用一个变量时,它在当前作用域中是可见的。如果在函数内部引用一个在函数外部定义的变量,可以使用global关键字将其声明为全局变量,以便在整个代码中都可以访问该变量。

    3. 检查导入语句:如果在代码中使用了其他模块或库的变量,确保已经正确导入了这些模块或库。

    如果仔细检查了代码,并且确认变量声明和作用域都正确,但仍然出现“未知的外部变量”错误提示,那么可能需要更详细的错误信息或查看完整的代码,以便更好地理解问题并提供更准确的解决方案。