文章目录
报错
In file included from ./src/disk/elf.h:4,
from ./src/disk/code.c:4:
./src/memory/instruction.h:46:16: error: redefinition of ‘struct INSTRUCT_STRUCT’
46 | typedef struct INSTRUCT_STRUCT
| ^~~~~~~~~~~~~~~
解决
这个错误是include重复包含了,
#include <header>
所做的事就是把header里面的东西copy一份过来,这样就容易让某些文件重复包含,就产生了这样的错误redefinition of something
知道了原理,那么如何解决呢?
请看下面。
解决办法是使用include guard,类似于设计模式里面的单例模式。将所有的.h文件 使用#ifndef #define #endif
这样的宏来避免重复include.
下面以mmu.h头文件来说明如何使用
//mmu.h
// include guard
#ifndef mmu_guard // 如果宏mmm_guard 没有被定义,则往下执行,如果宏mmm_guard被定义了,则跳转到#endif
#define mmu_guard
// memory management unit
#include <stdint.h>
uint64_t va2pa(uint64_t vaddr);
#endif
防止出现重复include的问题,建议所有的头文件都以这种形式书写。