1

我的 C 代码有一个奇怪的问题,我不太了解。
我有两个头文件os_memory.hos_mem_drivers.h.

os_memory.h

#ifndef OS_MEMORY_H_
#define OS_MEMORY_H_

#include "lcd.h"
#include "os_mem_drivers.h"

static const MemAddr gui_alloc_table_start = 0x1C8;

#endif /* OS_MEMORY_H_ */

os_mem_drivers.h

#ifndef OS_MEM_DRIVERS_H_
#define OS_MEM_DRIVERS_H_

#include "os_memory.h"
#include "defines.h"
#include "os_core.h"

typedef uint16_t MemAddr;

#endif

如果我尝试编译此代码,编译器会给我错误unknown type name 'MemAddr'。我不明白,因为我在每个 .h 文件中都包含了正确的头文件,所以不应该有任何错误。
有什么我在这里想念的吗?

我正在为这个项目使用 AtmelStudio 6.1 和 C 语言。

4

1 回答 1

3

MemAddr您应该在包括之前移动类型的定义"os_memory.h"

os_mem_drivers.h

#ifndef OS_MEM_DRIVERS_H_
#define OS_MEM_DRIVERS_H_

#include <stdint.h>

typedef uint16_t MemAddr;

#include "os_memory.h"
#include "defines.h"
#include "os_core.h"

#endif

但更重要的问题是 和 的循环"os_memory.h"包含"os_mem_drivers.h"。每个都包含另一个:包含守卫防止递归包含,但很难理解真正发生的事情。您应该尝试解决此问题。

于 2015-05-16T10:40:40.320 回答