Laz*_*zer 32 c identifier keyword
例如(在C中):
int break = 1;
int for = 2;
Run Code Online (Sandbox Code Playgroud)
为什么编译器必须在所有推断出任何问题,break和for这里的变量?
所以,我们需要关键字,因为
Jer*_*fin 28
没有必要 - Fortran没有保留任何单词,所以类似于:
if if .eq. then then if = else else then = if endif
Run Code Online (Sandbox Code Playgroud)
是完全合法的.这不仅使编译器难以解析语言,而且通常几乎不可能让人阅读或发现错误.例如,考虑一下经典的Fortran(比如说,通过Fortran 77 - 我最近没有使用它,但至少希望他们在最近的标准中修复了一些这样的东西).Fortran DO循环如下所示:
DO 10 I = 1,10
Run Code Online (Sandbox Code Playgroud)
没有它们并排,你可能会看到你如何错过这是如何不同的:
DO 10 I = 1.10
Run Code Online (Sandbox Code Playgroud)
不幸的是,后者根本不是一个DO循环 - 它是一个简单的值赋值1.10给一个名为的变量DO 10 I(是的,它还允许名称中的空格).由于Fortran还支持隐式(未声明)变量,因此这些(或者是)完全合法,并且一些编译器甚至会在没有警告的情况下接受它!
Kac*_*che 20
然后,当遇到如下声明时,计算机会做什么:
while(1) {
...
if (condition)
break;
}
Run Code Online (Sandbox Code Playgroud)
它真的会破裂吗?还是应该把它当作1;?
在某些情况下,语言会变得模棱两可,或者您必须创建一个非常智能的解析器,可以推断出微妙的语法,这只是不必要的额外工作.
他们没有.PL/1着名的没有关键词; 每个"关键字"(BEGIN,DO,...)也可以用作变量名.但允许这意味着你可以写出非常模糊的代码:如果DO> BEGIN THEN PRINT:= CALL-GOTO; 保留"语句关键字"作为语言通常不会丢失,如果这组名称是适度的(因为它在我见过的每个语言中除了PL/1 :-).
APL也很有名,没有关键词.但它有一套约200个令人惊叹的标志性符号,用于编写复杂的运算符.("多米诺"运算符[不要问!]是一个方框,中间有一个计算器分号)在这种情况下,语言设计师只使用图标而不是关键字.结果是APL具有"只写"语言的美誉.
底线:不是要求,但如果关键字是程序员已知的小集合中的保留标识符,它往往会使程序更具可读性.(有些langauges坚持认为"关键字"以一个特殊的标点符号开头,如".",以允许使用所有可能的标识符,但这不值得在页面上键入或混乱的额外麻烦;它很容易远离在关键字集很小时匹配关键字的"标识符".
由于它标记为C,因此原始C语言默认情况下将任何变量定义为类型int.
这意味着foo;将声明一个类型的变量int.
让我们说你做break;.那么编译器如何知道您是否要声明一个名为的变量break或使用该关键字break?