【问题标题】:Pasting a character as a token将字符粘贴为标记
【发布时间】:2010-12-22 20:27:39
【问题描述】:

我想知道是否可以在运行时将字符粘贴为 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);

但这不是我要问的。

【问题讨论】:

  • 我想知道是否有办法让预处理器做到这一点。
  • 那为什么首先是一个字符呢?
  • 如果我理解正确,您希望在编译时将运行时发生的事情处理成代码,而不需要预处理器。但是,C 是一种静态语言,其中编译发生在 before 运行时。编译器缺乏预知能力。
  • 可以使用 strtok() 完成简单的标记化。使用 yacc 等人可以完成更复杂的操作。如果你想要一个解释器来解析和执行语句,你可以选择在你的应用程序中嵌入一个解释器——默认情况下没有可用的 C 解释器。
  • 如果您想在运行时拥有令牌,最好选择其他语言。 C 运行时对 C 语法一无所知。

标签: c character token


【解决方案1】:

这个怎么样:

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

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

a = OPERATION(3, 4, +)

【讨论】:

  • 不要忘记 A 和 B 两边的括号!
  • 嗯,我完全理解这是可能的,但我想使用一个字符,这不是答案。不过还是谢谢。
  • 这不是答案,但我选择这个作为答案是因为 Andy 的问题本身,他们回答了我的问题。
【解决方案2】:

也许你想要这个:

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

【讨论】:

    【解决方案3】:
    #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') 返回@9876544

    【讨论】:

    • 感谢您的回答,但这不是我要找的。我想知道是否有办法在运行时将字符粘贴为标记。
    • @evothur - 这个答案实际上解决了您的“运行时”要求。鉴于您在问题中添加的代码示例,它可以满足您的需求。
    • 是的,我知道,但我不想要“逐案”代码。我想知道是否有办法只写任何字符并将其用作标记。但我认为这是不可能的。
    猜你喜欢
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多