【问题标题】:Converting C to Java understanding macro's in C将 C 转换为 Java 理解 C 中的宏
【发布时间】:2023-02-06 02:21:36
【问题描述】:

我被告知以下 C 代码

#define ADD(a, b) a + b

// example function
void foo()
{
  int i = ADD(1, 2); // add two ints
  double d = //doubles
    ADD(3.4, 5.6);

  int sly = ADD(1, 2) * 3; // not what it appears to be
}

转换为这个 Java 代码

package demo;

public class DemoTranslation {
    public static int add(int a, int b) {
        return a + b;
    }

    public static double add(double a, double b) {
        return a + b;
    }

    /**
     * example function
     */
    public static void foo() {
        int i = add(1, 2); // add two ints
        double d = /* doubles */ add(3.4, 5.6);

        int sly = 1 + 2 * 3; // not what it appears to be
    }
}

java 中的 1+2*3 = 7。C 代码如何生成那个而不是 9?

【问题讨论】:

  • C 宏是纯文本替换。由于缺少括号,那个特定的 C 宏是错误的
  • (1+2)*3 = 9, 1+(2*3)=7
  • 你能提供一个答案来解释为什么 c 代码说 ADD(1,2) * 3 = 9 而不是 7 吗?

标签: java c


【解决方案1】:

C 宏替换在比程序的语义分析更低的级别上对词法标记进行操作。

给定 #define ADD(a, b) a + b,源文本 ADD(1, 2) * 3 被替换为 1 + 2 * 3,计算结果为 1+(2•3) = 7。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-14
    • 2015-03-23
    相关资源
    最近更新 更多