【发布时间】:2022-01-02 11:25:59
【问题描述】:
我想定义一个变量(Mode)在两个函数之间进行选择,但是编译器似乎没有做我想要的,这里是代码:
#include <stdio.h>
#define Mode dif
#if Mode == sum
int function(int a, int b)
{
return a+b;
}
#elif Mode == dif
int function(int a, int b)
{
return a-b;
}
#else
ERROR
#endif
int main()
{
printf("%d",function(5,3));
return 0;
}
编译器为我放入“Mode”的任何字符串值(或整数0)选择函数“sum”(或我写的第一个),并为我输入的任何整数选择“ERROR”状态0,这是我目前观察到的。
我可以通过用数字更改“sum”和“dif”来使其工作,但我正在从事另一个电子项目,在该项目中我必须使用单词而不是数字,否则将难以实施和诊断,例如:
#define Falling_Edge 0x00
#define Rising_Edge 0x01
#define Both 0x02
#define IT_Mode X // X could be Falling_Edge, Rising_Edge or Both
#if IT_Mode == Falling_Edge
// do something
#elif IT_Mode == Rising_Edge
// do something
#elif IT_Mode == Both
// do something
#elif
ERROR
#endif
请问有没有办法在 C 中实现这样的功能?
谢谢。
【问题讨论】:
-
预处理器不这样做,这不是它的设计目的。尽管您评论了“另一个我必须使用单词而不是数字的电子项目”,但您没有说明使用数字会成为问题的任何理由。
-
在 C 中你不能直接比较字符串。使用您拥有字符或整数的代码就可以正常工作。 this 的可能重复项。
-
Is there a way to achieve something like this in C please?是的你can make it work by changing "sum" and "dif" with numbers。 (?) -
什么是电子项目,它如何影响这项任务?
-
感谢您的 cmets,所以假设您必须制作一个与多个微控制器一起工作的项目,或者同一个项目可以用于做不同的事情,例如,如果您更改一个简单的计数器,然后数字可以使用相同的代码递增或递减。
标签: c preprocessor