我正在尝试编译我编写的C项目,并且头文件具有一些常量变量。此头文件包含两个.c文件,但是,这会导致符号重复错误。
我的项目结构如下:(a => b表示b包含a)
common.h => struct.h
struct.h => btree.h
btree.h => btree.c && project.c
导致错误的相关常量保留在struct.h
中我应该如何重建项目以避免这种困惑?
我的常数看起来像:
const uint32_t NODE_TYPE_SIZE = sizeof(uint8_t);
const uint32_t NODE_TYPE_OFFSET = 0;
const uint32_t IS_ROOT_SIZE = sizeof(uint8_t);
const uint32_t IS_ROOT_OFFSET = NODE_TYPE_SIZE;
const uint32_t PARENT_POINTER_SIZE = sizeof(uint32_t);
const uint32_t PARENT_POINTER_OFFSET = IS_ROOT_OFFSET + IS_ROOT_SIZE;
const uint8_t COMMON_NODE_HEADER_SIZE =
NODE_TYPE_SIZE + IS_ROOT_SIZE + PARENT_POINTER_SIZE;
struct.h
具有这些类型的变量(除了上述变量外,还包含约20个变量)和某些结构。
最佳答案
不要在.h文件中定义常量。仅将它们声明为extern
例:
extern const uint32_t NODE_TYPE_SIZE;
然后在.c文件中定义它们。顺便说一句,这些变量没有任何意义,它们应该是宏。
#define NODE_TYPE_SIZE sizeof(uint8_t)
与所有其他类似常量相同。否则,如果必须从不同的编译单元访问它们,它们将被存储在内存中并从中读取,这会对性能产生负面影响。
关于c - 由于头文件,编译C项目导致符号重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62923922/