我的C代码有一个奇怪的问题,我不太懂
我有两个标题文件os_memory.h
和os_mem_drivers.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_ */
#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语言。
答案 0 :(得分:2)
在包含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"
的循环包含。每一个都包括另一个:包括防护,防止递归包含,但让你很难理解真正发生的事情。你应该尝试解决这个问题。