gpt4 book ai didi

macros - 有没有办法检查宏的非数字值

转载 作者:行者123 更新时间:2023-12-04 10:49:00 25 4
gpt4 key购买 nike

假设我有

#define Name Joe

有没有办法区分宏的不同值。以下不起作用,但你明白了
#if   Name==Joe
// some code
#elif Name==Ben
// some alternative code
#endif

我想用它从相同的源代码生成各种目标文件。源差异很小,因此可以轻松进行宏控制。宏将通过 -DName=Joe 传入编译器标志。另请注意 Name将是一个实际的符号名称,所以我们不能使用基于 #define Joe 1 的技巧等等。

强制编辑 注意 this similar question实际上处理字符串值宏。此外,那里的答案无济于事。接受的答案避免了问题(但没有解决),另一个答案使用 strcmp在依赖于扩展等的宏中。

最佳答案

是的,这是可能的,但它并不是那么漂亮。

这是一个例子;更改 NAME,它将打印正确的内容。您只需要定义 TEST_FOR_Name提前为每个名称指定一个唯一的值。

#define TEST_FOR_Joe 1
#define TEST_FOR_Ben 2
#define DO_TEST(NAME1, NAME2) DO_TEST_impl(NAME1, NAME2)
#define DO_TEST_impl(NAME1, NAME2) TEST_FOR_ ## NAME1 == TEST_FOR_ ## NAME2

#define NAME Ben

#include <iostream>

int main() {
std::cout << "Hello!" << std::endl;
#if DO_TEST(NAME, Joe)
std::cout << "Joe Found!" << std::endl;
#elif DO_TEST(NAME, Ben)
std::cout << "Ben Found!" << std::endl;
#else
std::cout << "Neither found!" << std::endl;
#endif
}

基本思想是我们构建具有与每个名称相关联的唯一数值的 token 。如果它找不到 token 的值,则比较只会失败,否则它会确保数字相同。

关于macros - 有没有办法检查宏的非数字值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32999097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com