我爱Cyinyinyin 发表于 2021-1-23 00:15:59

外部引用变量显示未定义

extern unsigned long arr;
unsigned long linearization(void)
{

unsigned long temp = 0; //中值温度电压

      // 选择排序
   for (int i = 0; i<5; i++) //ADCN是采集的数据的个数
   {
         int k = i;
         for (int j = i+1; j<6; j++)
      {
             if (arr < arr)// arr是采集的数据
                k = j;
         }
         if (k != i)
         {
             temp = arr;
             arr = arr;
             arr = temp;
         }
   }
   temp = arr;   //返回中值
   return temp;
}
红色·是我引用的unsigned long得数组 但是错误显示说我未定义 这是为啥啊

°蓝鲤歌蓝 发表于 2021-1-23 00:38:35


extern unsigned long arr;
这一句只是声明,并未定义 arr
你要在作用域内单独定义一遍
unsigned long arr;

C++ 的声明和定义是不一样的。

我爱Cyinyinyin 发表于 2021-1-23 00:42:37

°蓝鲤歌蓝 发表于 2021-1-23 00:38
这一句只是声明,并未定义 arr
你要在作用域内单独定义一遍



我是IAR 用的C语言啊

我爱Cyinyinyin 发表于 2021-1-23 00:44:00

°蓝鲤歌蓝 发表于 2021-1-23 00:38
这一句只是声明,并未定义 arr
你要在作用域内单独定义一遍



那要是重新定义的话不会对之前的变量有影响吗就是里面的数

°蓝鲤歌蓝 发表于 2021-1-23 00:50:15

我爱Cyinyinyin 发表于 2021-1-23 00:44
那要是重新定义的话不会对之前的变量有影响吗就是里面的数

你里面都没数啊,怎么会有影响呢?
如果里面有数的话就说明 已经定义而且初始化了,就不会报这个错了。
你现在报这个错就是因为 你只声明了这个变量而已。
声明是不会给 变量 分配内存的,只有 定义 的时候才会分配内存。

jackz007 发表于 2021-1-23 00:53:31

本帖最后由 jackz007 于 2021-1-23 00:54 编辑

extern unsigned long arr;
      如果一个程序同时使用多个代码文件,你想使用在其它代码文件中定义的全局变量 arr 才会这样去声明,这样,代码文件在编译的时候不会报错,在连接的时候,如果在从其它代码文件编译出的 obj 中没有找到这个 arr ,就会报错。

我爱Cyinyinyin 发表于 2021-1-23 17:45:57

jackz007 发表于 2021-1-23 00:53
如果一个程序同时使用多个代码文件,你想使用在其它代码文件中定义的全局变量 arr 才会这样去声 ...

那我是需要这个程序运行起来arr里面才会有值怎么办,做的传感器
页: [1]
查看完整版本: 外部引用变量显示未定义