考研 408 × 求职面试
知识点 · 编译原理 · 基础
每日一题 · 编译原理
解析
面试小贴士 · 编译原理
代码实现 · C
#include <stdio.h>
#include <string.h>
int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }
int main() {
// 模拟解释执行:逐条读取源码字符串并解析后执行
const char *src[] = {"add 3 4", "sub 10 2"};
for (int i = 0; i < 2; i++) {
char op[4]; int a, b;
sscanf(src[i], "%s %d %d", op, &a, &b);
int r = strcmp(op, "add") == 0 ? add(a, b) : sub(a, b);
printf("解释执行结果:%d\n", r);
}
// 模拟编译执行:先确定目标操作,再直接调用已生成的函数表
int (*compiled[])(int, int) = {add, sub};
printf("编译执行结果:%d\n", compiled[0](3, 4));
printf("编译执行结果:%d\n", compiled[1](10, 2));
return 0;
}