C语言毕业设计:为什么 C++语言设计师不断重复使用关键字

关于C语言毕业设计的问题,在how many keywords are there in c中经常遇到, 支持重用短关键字(并添加上下文相关的含义)而不仅仅是添加更多关键字的主要论点是什么?

支持重用短关键字(并添加上下文相关的含义)而不仅仅是添加更多关键字的主要论点是什么?

只是你想避免现有的代码,可能已经使用了一个新的关键字,或者有更深层次的原因?

C ++ 11 中的新“枚举类”让我想到了这一点,但这是一个通用的语言设计问题。

69

只是你想避免现有的代码,可能已经使用了一个新的关键字,或者有更深层次的原因?

不,这就是原因。

根据定义,关键字总是被认为是关键字,无论它们在源中出现在哪里,因此它们不能用于其他目的。将某个东西作为关键字会任何可能将该令牌用作变量、函数或类型名称的代码。

C 委员会采取不同的方法,并使用_Reserved 名称添加新关键字,例如_Atomic_Bool,然后他们添加一个新的标题(<stdatomic.h><stdbool.h>)与一个更好的宏,以便您可以选择是否包含标题以自动获取名称atomicbool

C ++ 委员会不喜欢宏,并希望它们是正确的关键字,因此要么重新使用现有的(例如auto),要么添加上下文相关的“关键字”(这不是真正的关键字,而是“具有特殊含义的标识符”,因此它们可以用于其他事物,例如override),或者使用不可能与用户代码冲突的奇怪拼写。

17

一些旧语言根本没有关键字,特别是PL/1其中

IF IF=THEN THEN BEGIN;
  /* some more code */
END;

是一段合法的代码,但完全不可读。(也可以看看APL作为write-mostly编程语言的例子,几个月后,即使是代码的原作者,也完全看不懂)。

C 和 C++ 语言家族有一组由语言规范定义的关键字。但是有非常广泛使用的语言,有数十亿的遗留源代码行。如果你 (或他们的标准化委员会) 添加一个新的关键字,就有可能与一些现有的程序发生冲突,正如你所猜到的,其他人回答这是坏的。因此,如果标准添加了例如enum_class作为新的关键字,那么当有人不高兴地将其实体用作

此外,众所周知,C ++ 的解析速度很慢(特别是,因为像<vector>这样的标准头文件正在拉动十几千行源代码,并且因为模块还不在 C ++ 中,并且因为语法非常模糊),所以复杂的解析器来处理新的语法并不是什么大问题(解析 C ++ 显然比解析新的 C 库更难)。

其他一些语言(例如 Lisp 的一些方言,例如Common Lisp和一些Scheme,您可以在其中重新定义letif宏,以及macrosiconic语言中的现有非常不同,因为在4替换 s

10

我认为这主要是因为添加关键字会现有的代码,这些代码恰好在其他上下文中使用此关键字,正如您所建议的那样。

10

只是你想避免现有的代码,可能已经使用了一个新的关键字,或者有更深层次的原因?

根据定义,关键字是一种特殊的标记,不能在其他任何地方使用;因此,引入关键字会使用给定拼写的标识符的任何代码。

某些语言使用术语上下文关键字来指代仅在特定上下文中解释为关键字的拼写。如果以前在此上下文中不能使用“wild”标识符,则可以保证上下文关键字的引入不会现有代码。例如,由于在函数签名中,没有标识符可以立即出现在右括号之后,因此可以在此处引入所谓的上下文关键字(例如或0)。

另一方面,在以前允许使用任何标识符的地方,添加关键字会带来风险。例如:

struct H { my_type f; enum { g }; };:使用enum class而不是 new 关键字是因为在这种情况下,任何新词都可能被错误地用作数据成员声明的开头;只有一个关键字是明确的(在 LL(1)中),并且引入一个新的关键字可能会代码。

void h() { my_type f; auto x = g(); }:使用auto而不是新关键字是因为任何新词都可能与现有类型冲突。这仍然是一个令人惊讶的选择,因为它已经是 C中位置可用的关键字(默认为int类型),但其含义已更改(理由是其使用的可能性很低)。

正如一些人提到的那样,语言可以完全没有关键字(Haskell 非常接近),或者可以无缝地引入关键字(例如,如果每个声明都已经以关键字开头,那么引入一个新的关键字就不能冲突)。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(921)
Python画隐函数图像:python迭代函数画三角形:
上一篇
9月份cpi:给5个用户9份礼物(excel gifts)
下一篇

相关推荐

  • cvt和自动挡哪个好提升驾驶体验的最佳选择

    CVT(可变转换器)是一种由传动带及传动轮组成的无级变速器,它可以在没有传动档位的情况下,根据驾驶者的驾驶习惯,自动调整传动轮之间的转速比,从而实现无级变速。自动挡是指车辆自动变速箱,它使用液力传动来实现变速,可以自动适应车辆的行驶状态,减少司机的疲劳,提高行车的舒适性。…

    2023-06-08 07:42:19
    0 39 23
  • cv一叶扁舟和清影轩阳:漫游在一叶扁舟和清影轩阳之间

    cv一叶扁舟是一款开源的计算机视觉库,用于图像处理、计算机视觉等。它提供了丰富的API,可以帮助开发者快速实现各种图像处理任务,如图像分割、目标检测、图像识别等。清影轩阳是一款开源的计算机视觉框架,用于图像处理、目标检测、分类等。它提供了丰富的API,可以帮助开发者快速实现各种图像处理任务,如图像分割、目标检测、图像识别等。…

    2023-08-05 07:06:20
    0 27 72
  • css设置滚动条宽度设置:This is a title

    CSS设置滚动条宽度的方法:使用CSS3的。-webkit-属性:…

    2023-06-06 10:53:01
    0 85 94
  • xl和xe汽车cvt:探索XL和XE汽车的CVT技术优势

    XL和XE汽车CVT是一种变速器,它使用液力变矩器代替传统的机械变速器,以达到更高的效率。它的工作原理是,当发动机输出功率时,液力变矩器就会将这些功率转换为液压能量,然后将能量传递到变速器的输出轴上,从而实现变速。…

    2023-04-09 00:41:04
    0 51 46
  • cordon bleu是什么意思:法式炸鸡卷——Cordon Bleu的经典之作

    Cordon Bleu是一种烹饪技术,其中肉片被置于奶酪和火腿之间,然后用面包屑裹上,最后煎炸或烤熟。这种技术通常用于制作鸡肉,但也可以用于制作其他类型的肉类,如牛肉或猪肉。…

    2024-01-27 15:13:30
    0 39 34
  • countif 非空:非空单元格的计数

    Countif 非空是指计算某个单元格不为空的数量。代码如下:…

    2023-04-22 15:54:15
    0 54 21
  • java double保留一位小数:How to Round a Double to One Decimal Place in

    示例示例使用类可以轻松实现java double保留一位小数的功能,具体代码如下:// 创建对象…

    2023-05-14 07:40:03
    0 72 86
  • linux如何写c语言一个完整的指南

    示例示例在Linux系统中,可以使用C语言编写源代码文件,然后使用GCC编译器来编译源代码文件,生成可执行文件。下面是一个简单的C语言代码示例:…

    2023-05-16 02:02:45
    0 12 90

发表评论

登录 后才能评论

评论列表(82条)