我在.c文件和.h文件中定义了一些宏常量,如下所示:
#define LOCAL_L2_BASE_LV (0x00800000UL)
<。>在.c文件和
#define FPGA_PLI_FEEDBACK_OFFSET_LV_FREQUENCY (0x00007000UL)
<。>文件中的
我想在不同的头文件中使用这些常量。这样做的最佳方法是什么?我最初的想法是在头文件中使用extern我想使用常量,但这是否有效?
答案 0 :(得分:6)
宏不能是外部的,它们不是变量。它们只是文本替代品。要使宏可用于其他标头,您需要包含定义宏的标头。
答案 1 :(得分:2)
您应该将两个定义放在头文件中(以便它们可以从任何其他源文件中看到),或者在源文件中将它们定义为const限定变量并在标题中使用extern
文件以将它们公开给其他翻译单元。
头文件中的extern
声明如下所示:
extern const unsigned long k_local_l2_base_lv;
extern const unsigned long k_fpga_pli_feedback_offset_lv_freq;
然后,您可以在源文件的文件范围内使用外部链接定义它们,如下所示:
const unsigned long k_local_l2_base_lv = 0x00800000UL;
const unsigned long k_fpga_pli_feedback_offset_lv_freq = 0x00007000UL;
答案 2 :(得分:2)
您不能将extern
用于宏,因为它们会在链接之前展开。
一种方法是使用您需要的定义创建标题,并将其包含在您需要的位置。
另一种方法是将定义传递给编译器(假设你正在使用gcc):
gcc -DLOCAL_L2_BASE_LV=0x00800000UL source.c -o executable
第一个解决方案似乎更好,因为它将代码保存在源代码中(而不是构建过程)。
此外,在这种特定情况下,值的括号不是必需的,因为它形成一个令牌,并且它将被扩展。