无法访问当前范围之外的两个范围的变量?

时间:2015-06-19 08:17:11

标签: c function variables compiler-errors scope

这里有一些非常简单的测试代码来阐述我的问题:

#include <stdio.h>
#include <string.h>
#include <stdlib.h> 

void prompt();
void func();

int main() {
    char* arr = "Hello";

    while(1) {
        prompt();
    }

    return 0;
}

void prompt() {
    func();
}

void func() {
    char* data = NULL;
    data = arr;
}

如您所见,我在arr函数

中定义变量main()
  • 然后代码进入while()循环,

    • 进入名为prompt()的函数

      • 进入名为func()的函数

        • 其中我想访问我之前定义的变量arr

但是,当我尝试编译这段代码(使用gcc)时,我收到错误告诉我

  

误差:&#39; ARR&#39;未声明的(首先在此函数中使用)`。

另外,我收到警告告诉我

  

warning: unused variable 'arr'

太奇怪了......任何想法?

2 个答案:

答案 0 :(得分:3)

您有2个选项

  
      
  1. 使变量arr为全局(如Sourav所述)

  2.   
  3. 将指向arr变量的指针传递给prompt()函数,然后传递给func()。然后,您可以在func()中使用它。

  4.   

您选择哪一个取决于手头的任务和项目的复杂性。

如果它是一个简单的项目而且这是一次性的,那么你可以使用全局。

然而,随着项目复杂性的增加,特别是如果您要在多个地点进行此项工作,我强烈建议您付出努力,然后选择选项2

答案 1 :(得分:2)

在您的代码中,arr具有main()功能(块)范围。在func()内,不存在arr

如果您需要从arr访问func(),则需要将其设为全局。

(#)不要与生命混淆