0

我目前正在尝试使用定义(部分)相同常量的两个标题。通常常量应该是相同的,但我的计划是添加一个检查以绝对确定。该问题可以通过以下最小示例来描述:

#include "header1.h" //Defines MY_CONSTANT 99
#include "header2.h" //Also defines MY_CONSTANT 99

编译是可能的,但警告

警告:“MY_CONSTANT”重新定义

不应忽略,因为我想确保两个标题都定义了相同的值。

我的计划是在包含第二个标题并检查值是否相等之前取消定义。我试图将常量的第一个值保存为 C++ const 并添加了一个静态断言,但编译器似乎没有做我需要的事情:

#include "header1.h" //Defines MY_CONSTANT 99
const uint64_t MY_CONSTANT_OLD = MY_CONSTANT;
#undef MY_CONSTANT
#include "header2.h" //Defines again MY_CONSTANT 99
static_assert(MY_CONSTANT_OLD == MY_CONSTANT, "Redefined with other value"); //Check same definition

MY_CONSTANT' 未在此范围内声明

如果值不相等,我该如何解决重新定义常量并出现编译器错误的问题?

4

0 回答 0