【发布时间】: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 吗?