运行时和编译时有什么区别?
可能出错的是运行时错误:
此外,程序本身也可能检测到错误:
我会从错误以及它们何时可以被捕捉的角度来考虑。
编译时:
string my_value = Console.ReadLine();
int i = my_value;
一个字符串值不能被赋给 int 类型的变量,因此编译器在编译时就确定了这段代码存在问题。
运行时:
string my_value = Console.ReadLine();
int i = int.Parse(my_value);
这里的结果取决于ReadLine()返回的字符串是什么。有些值可以解析为整数,而另一些则不行。只能在运行时确定。
.app
扩展名的第一次编译吗?还是每次用户启动应用程序时都会发生? - mfaani编译时: 是指开发人员编译代码的时间周期。
运行时: 是指用户运行软件的时间周期。
您需要更清晰的定义吗?
int x = 3/0
,但你不对这个变量做任何事情,我们没有打印它或者其他什么操作。那么这仍然被认为是运行时错误吗? - Robben(编辑:以下内容适用于C#和类似的强类型编程语言。我不确定这是否能帮到你。)
比如,编译器将在编译时检测到以下错误,并导致编译错误,这样在运行程序之前就可以发现它:
int i = "string"; --> error at compile-time
另一方面,编译器无法检测到以下这种错误。您将在运行时(程序运行时)收到错误/异常。
Hashtable ht = new Hashtable();
ht.Add("key", "string");
// the compiler does not know what is stored in the hashtable
// under the key "key"
int i = (int)ht["key"]; // --> exception at run-time
将源代码转换成在屏幕、磁盘或网络上发生的事情有大约两种方式,分别称为编译和解释。
在编译程序中(例如c和fortran):
第一步发生的事情称为“编译时”,第二步发生的事情称为“运行时”。
在解释程序中(例如MicroSoft basic(在dos上)和python(我想)):
在这种情况下,编译时间和运行时间之间的差异比较难以确定,对程序员或用户来说也不那么重要。
Java是一种混合体,其中代码被编译为字节码,然后在虚拟机上运行,虚拟机通常是字节码的解释器。
还有一种中间情况,即将程序编译为字节码并立即运行(例如awk或perl)。
int i = 2;
i += MY_CONSTANT;
编译器能够在编译时执行此计算,因为它知道2是什么,MY_CONSTANT是什么。因此,这样可以避免在每次执行时进行一次计算。嗯,好的,"runtime"用于描述程序运行时发生的事情。
"Compile time"用于描述程序在构建过程中发生的事情(通常由编译器完成)。
在编译时完成的操作在程序运行时几乎不会产生任何成本,但在构建程序时可能会产生大量成本。
与之相反,构建时的成本较小,在程序运行时成本更高。
从另一方面来看;如果某些内容在编译时完成,那么它只能在您的计算机上运行。如果某些内容是在运行时完成的,则它将在用户的计算机上运行。
一个重要的例子是单位承载类型。编译时版本(例如 Boost.Units 或 D中的我的版本)最终与使用本机浮点代码解决问题的速度一样快,而运行时版本最终必须携带关于值所在单位的信息,并在每个操作旁边执行检查。另一方面,编译时版本要求值的单位在编译时已知,并且无法处理来自运行时输入的情况。
接下来是对之前类似问题的回答进行的跟进,问题链接为What is the difference between run-time error and compiler error?
编译错误/编译时错误/语法错误/语义错误:编译错误是由于拼写错误引起的错误,如果我们没有遵循任何编程语言的正确语法和语义,那么编译器会抛出编译错误。它们不会让你的程序执行一行代码,直到你消除所有语法错误或调试编译时错误。
例如:在C语言中缺少分号或将int
误输入为Int
。
运行时错误:运行时错误是在程序运行时生成的错误。这些类型的错误会导致您的程序行为异常或甚至可能使您的程序崩溃。它们通常被称为异常。
例如:假设您正在读取一个不存在的文件,将导致运行时错误。
在此处阅读更多关于所有编程错误的信息。