数组在头文件中定义,在 C 文件中未知



我为微控制器编写代码,程序看起来像这样,这不是真正的程序,它只是提出问题的一个例子。

我想表明,如果我指向内存中的一个位置并在头文件中定义指针,则无法调用源文件中定义的数组。

测试.h:

#define arr * (BYTE *)(0X10000);
int function(int i);

测试.c:

#include "test.h"
int function(int i){
   arr[5] = 1; 
}

问题是: undefined identifier "arr"

怎么可能认不出来呢?

让我假设0x10000是微控制器内寄存器的确切起始地址,并且您希望在其中写入一些字节。然后我会#define我的别名如下:

#define MY_REGISTER (BYTE*)((void*)0x10000)

在这种情况下,您可以使用 MY_REGISTER 宏作为初始值设定项:

BYTE* myRegister = MY_REGISTER;
myRegister[5] = 1;

注意:没有指定MCU和编译器,我无法测试我的答案。

指令

必须与#在同一行:

而不是

#
define arr * (BYTE *)(0X10000);

#
include "test.h"

#define arr * (BYTE *)(0X10000);

#include "test.h"

(它将解决您的问题

未定义的标识符"arr">

但其他问题将会出现。

好的,这是你在这里的第一个问题,你不能改变常量。不管糟糕的#definearr同理如何,您都在尝试更改上面定义为常量的arr。

#define arr * (BYTE *)(0X10000) //; - you don't need a semicolon after define

接下来,您尝试为 arr 分配一个新值,这是一个不行:

arr[5] = 1; //cannot change a constant

不过,您可以分配另一个数组,但您可能不希望这样做:

 int arr[5];
     arr[5] = 1;

但是,您可以这样做:

#undef arr
#define arr 1

相关内容

  • 没有找到相关文章