为什么"static"关键字在C和C++中有这么多含义?

Oys*_*ein 28 c c++ static keyword

众所周知,关键字在C语言中static多重含义 .C99增加了合法写作的可能性

void foo (int arr[static 50])
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

这增加了混乱,而C++有静态成员变量和函数.

如果可以以某种方式连接所有用途,这不会那么麻烦,但我发现很难找到某些情况的链接.特别是为什么static关键字应该用于修改可见性(链接),或者它究竟与数组的最小元素数量有关.

那么滥用static关键字是否存在历史原因,或者是否存在连接其所有用途的秘密链接?

Pet*_*ham 26

向语言添加新关键字会破坏向后兼容性.因此static,在其使用可能意味着某些东西(int arr[static 50]vs int arr[auto 50]int arr[extern 50])的地方使用,并且根据其在先前版本中的使用,不能在语法上出现在该位置.

虽然在这种情况not_less_than下在该位置添加上下文敏感关键字不会破坏以前的代码,但它会添加另一个关键字(如此简单的文本编辑器,它们是关键字识别但不是语法识别,不知道它是否是关键字),并打破C中的"关键字不是上下文敏感"简化.

  • 如果以前的代码有一个名为`not_less_than`的变量,则添加`not_less_than`作为保留字_would_破坏前面的代码.这就是打破向后兼容性的意思. (13认同)
  • @Øystein:来自(IIRC)Ritchie的一句名言说他想改变一些运算符优先级,但他们有三个安装和数十万行代码.C在设计之前固化. (7认同)
  • @ 7vies:有时没有明显的方法可以在没有其他关键字的情况下添加另一个构造.C++委员会使用了大量的互联网搜索工具来检查大量代码以使用潜在的新关键字(因此他们知道,例如,'nullptr`作为关键字不太可能破坏任何人的代码),但这最终不可能实现.世纪,当`static`得到了所有这些意义. (4认同)
  • 是的,我认为"重用"关键字的主要原因是我们确信没有人在其代码中将其用作标识符甚至是`#define`. (3认同)