【发布时间】:2016-01-05 02:10:03
【问题描述】:
假设我有
#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,它依赖于扩展等。
【问题讨论】:
-
你可能不想要那个(XY 问题)
-
而不是用值定义名称为什么不只是
#define Joe然后你可以检查Joe是否存在#if defined(Joe) -
数字:是的。名称:没那么多。
-
how to compare string in C conditional preprocessor-directives 的可能重复项(尽管该问题仅与 C 有关)
-
@PCLuddite -- 根本不是重复的;如果您正在处理字符串,这种问题会更棘手,但在这种情况下不会太难。
标签: macros c-preprocessor preprocessor-directive