将字符粘贴为标记

发布于 2024-10-09 00:16:50 字数 462 浏览 0 评论 0原文

我想知道是否可以在运行时将字符粘贴为 C 中的标记。类似的东西

a = OPERATION(3, 4, '+')

将被处理为,

a = 3 + 4  

有办法做到这一点吗?

编辑:我想添加更多信息。显然这不能用预处理器来完成。我想知道是否有一个简短的方法可以做,

int i;
char sign[] = "+-*/";
for (i = 0; i < 4; i++)
  printf("%d\n", OPERATION(3, 5, sign[i]));

我知道我们可以创建一个函数,

int OPERATION(int a, int b, char c);

但这不是我要问的。

I'm wondering if it's possible to paste a character as a token in C at runtime. Something like,

a = OPERATION(3, 4, '+')

will be processed to,

a = 3 + 4  

Is there a way to do this?

Edit: I wanted to add some more information. Obviously this can't be done with the preprocessor. I'm wondering if there's a short way to do,

int i;
char sign[] = "+-*/";
for (i = 0; i < 4; i++)
  printf("%d\n", OPERATION(3, 5, sign[i]));

I know we can create a function as,

int OPERATION(int a, int b, char c);

But this is not what I'm asking.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

梦太阳 2024-10-16 00:16:50

怎么样:

#define OPERATION( A, B, OP )   ((A) OP (B))

但是,正如下面 delnan 所指出的,您必须将您的调用修改为:

a = OPERATION(3, 4, +)

How about this:

#define OPERATION( A, B, OP )   ((A) OP (B))

However, as delnan notes below, you would have to modify your call to:

a = OPERATION(3, 4, +)
掐死时间 2024-10-16 00:16:50

也许你想要这个:

#define OPERATION(a, b, op) ( \
    (op) == '+' ? (a) + (b) : \
    (op) == '-' ? (a) - (b) : \
    (op) == '*' ? (a) * (b) : \
    (op) == '/' ? (a) / (b) : 0)

Maybe you want this:

#define OPERATION(a, b, op) ( \
    (op) == '+' ? (a) + (b) : \
    (op) == '-' ? (a) - (b) : \
    (op) == '*' ? (a) * (b) : \
    (op) == '/' ? (a) / (b) : 0)
源来凯始玺欢你 2024-10-16 00:16:50
#define OPERATION(A,B,OP)     (OP=='+'?(A)+(B):OP=='-'?(A)-(B):OP=='*'?(A)*(B):OP=='/'?(A)/(B):NULL)

OPERATION(3,5,'+') 返回 8
OPERATION(9,2,'/') 返回 4
OPERATION(9,3,'*') 返回 27
OPERATION(3,5,'-') 返回 -2
OPERATION(3,5,'M') 返回 0

#define OPERATION(A,B,OP)     (OP=='+'?(A)+(B):OP=='-'?(A)-(B):OP=='*'?(A)*(B):OP=='/'?(A)/(B):NULL)

OPERATION(3,5,'+') returns 8
OPERATION(9,2,'/') returns 4
OPERATION(9,3,'*') returns 27
OPERATION(3,5,'-') returns -2
OPERATION(3,5,'M') returns 0

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文