我有一个项目,其中有两个不同的预处理器宏具有相同的名称,在两个不同的include文件中定义(来自两个不同的库),我必须在构建时检查它们是否具有相同的值。
到目前为止,我只能在运行时进行此检查,将宏值分配给不同的变量存储在不同的实现文件中,每个文件只包含涉及到的头文件之一。
如何在构建时执行此操作?
这是我迄今为止尝试过的(其中Macro1.h和Macro2.h是我无法修改的第三方文件):
头文件:
TestMultiMacros.h:
#ifndef TEST_MULTI_MACROS_H
#define TEST_MULTI_MACROS_H
struct Values
{
static const unsigned int val1, val2;
static const unsigned int c1 = 123, c2 = 123;
};
#endif // TEST_MULTI_MACROS_H
Macro1.h:
#ifndef MACRO1_H
#define MACRO1_H
#define MY_MACRO 123
#endif // MACRO1_H
Macro2.h:
#ifndef MACRO2_H
#define MACRO2_H
#define MY_MACRO 123
#endif // MACRO2_H
实现文件:
TestMultiMacros1.cpp:
#include "TestMultiMacros.h"
#include "Macro1.h"
const unsigned int Values::val1 = MY_MACRO;
TestMultiMacros2.cpp:
#include "TestMultiMacros.h"
#include "Macro2.h"
const unsigned int Values::val2 = MY_MACRO;
entrypoint.cpp:
#include "TestMultiMacros.h"
using namespace std;
static_assert(Values::val1 == Values::val2, "OK"); // error: expression did not evaluate to a constant
static_assert(Values::c1 == Values::c2, "OK");
int main()
{
}
我希望找到一个同时使用C++11和C++17的解决方案。
foo
和MY_MACRO
。 - HolyBlackCat