← 前一天目录后一天 →

每日科普 · 2026-10-14 周三

考研 408 × 求职面试

知识点 · 编译原理 · 基础

编译执行与解释执行的区别

编译执行:先用编译器把整个源代码一次性翻译成目标程序(如机器码),生成可执行文件,之后直接运行目标程序。像把一本外文书先整体翻译成中文,再读中文版。 解释执行:不生成独立的目标程序,解释器逐行或逐句读取源代码,边翻译边执行。像请同声传译,读一句翻一句。 主要区别: 1. 翻译时机:编译在执行前完成;解释发生在执行过程中。 2. 产物:编译通常产生目标代码或可执行文件;解释通常没有独立目标文件。 3. 效率:编译后运行快,少了运行时翻译开销;解释启动快、跨平台灵活,但整体常较慢。 4. 错误发现:编译期能集中检查语法、类型等错误;解释要到执行到相应语句才暴露。 5. 典型语言:C/C++、Go、Rust 常编译;Python、JavaScript 常解释。现代常混合:Java 先编译成字节码,再由 JVM 解释或 JIT 执行。

每日一题 · 编译原理

编译执行与解释执行的区别

关于编译执行和解释执行,下列说法正确的是: A. 编译执行不产生中间产物,解释执行一定产生可执行文件 B. 编译执行在运行前整体翻译源程序为目标程序,解释执行通常边翻译边执行 C. 解释执行一定比编译执行快 D. Java 源代码直接由 JVM 解释,不需要任何编译过程

解析

答案:B。编译与解释的核心区别是翻译时机和产物:编译先整体翻译生成目标代码,再执行;解释由解释器逐句翻译并立即执行,通常不生成独立目标程序。A 说反了;C 不成立,解释通常有运行时翻译开销,往往较慢;D 错误,Java 源码先编译为字节码,再由 JVM 解释或 JIT 执行。

面试小贴士 · 编译原理

编译执行与解释执行的区别

面试常问“编译和解释区别?Python/Java 属于哪种?”答:按翻译时机和产物区分,别只说快慢;举例 C 编译,Python 解释,Java 编译字节码+JVM 解释/JIT。易错:把语言绝对二分,忽略字节码和 JIT。

代码实现 · 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;
}
← 前一天目录后一天 →