【问题标题】:Why is "number" undeclared when I declared it in the function?为什么我在函数中声明“数字”时未声明它?
【发布时间】:2022-01-05 10:50:58
【问题描述】:
#include <stdio.h>

void numberisone()
{
    int number = 1;
}

int main()
{
    numberisone();
    
    printf("%d", number);

    return 0;
}

我对编程还很陌生,所以请让解释尽可能简单:) 提前致谢!

【问题讨论】:

  • 函数中定义了变量number:其作用域仅限于函数。
  • 因为标识符只存在于它们被声明的范围内。这是非常基础的东西,所以不要将 SO 视为交互式初学者教程,而应该只学习非交互式教程。

标签: c scope identifier undeclared-identifier


【解决方案1】:

变量number的声明范围是函数numberisone的最外层块

void numberisone()
{
    int number = 1;
}

在函数之外,该变量不存在且不可见。

所以 main 中使用的标识符 number 是未声明的

printf("%d", number);

为了让你的程序或多或少有意义,声明函数就像

int numberisone( void )
{
    return 1;
}

主要写

int number = numberisone();

【讨论】:

  • 重新“活跃且可见”:这将可见性和生命周期混为一谈。这是不必要的;对于这个问题,只需说“在函数之外,变量是不可见的”,并将生命周期排除在外。在函数之外,标识符是不可见的。在函数之外,只要函数的执行没有结束,对象就处于活动状态。
【解决方案2】:
#include <stdio.h>

int numberisone()
{
    int number = 1;
    return number;
}

int main()
{
    int num_1 = 0;
    num_1 = numberisone();

    printf("%d", num_1);

    return 0;
}

【讨论】:

  • 您确实应该对此添加解释,因为仅提供代码并不能帮助读者从您的答案中学习。请使用edit 改进此答案。
【解决方案3】:

在函数内声明的变量在该函数内只有一个作用域,即该变量只能在函数内使用。如果你需要,你可以像这样从函数中返回值,

 #include <stdio.h>
    
    int numberisone()
    {
        int number = 1;
        return number;
    }
    
    int main()
    {
        printf("%d", numberisone());
        return 0;
    }

【讨论】:

    猜你喜欢
    • 2023-01-13
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多