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

时间:2017-05-11 11:02:48

标签: c c-preprocessor undefined microcontroller opendiff

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

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

test.h:

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

int function(int i);

test.c的:

#include "test.h"

int function(int i){
   arr[5] = 1; 
}

问题是: undefined identifier "arr"

怎么可能无法识别呢?

3 个答案:

答案 0 :(得分:1)

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

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

在这种情况下,可以使用MY_REGISTER宏作为初始化程序:

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

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

答案 1 :(得分:0)

指令必须与#在同一行:

而不是

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

#
include "test.h"

使用

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

#include "test.h"

(它将解决你的问题

  

未定义的标识符“arr”

但是会出现其他问题。)

答案 2 :(得分:0)

好的,这是你的第一个问题,你不能改变常数。无论错误#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