【问题标题】:Where does the k prefix for constants come from?常量的 k 前缀从何而来?
【发布时间】:2011-06-28 08:19:40
【问题描述】:

常量以k 为前缀是很常见的做法(例如k_pi)。但是k 是什么意思?

难道c已经意味着char了吗?

【问题讨论】:

  • 这并不常见——我在 C++ 中从未见过。
  • 在 Cocoa 中它也被广泛使用。因此,您至少有两家世界上最大的软件公司在使用它。
  • @jon:在我工作的公司标准中实现它已经很常见了,它甚至在 Google 存在之前就已经建立(并不是说它已经过时了......)
  • 它可能不常见,但它肯定是 kommon。
  • 它的目的是争论的事实是不使用这种风格的一个很好的理由。可读性的一个目标是减少混淆和替代含义。

标签: c++ objective-c c prefix hungarian-notation


【解决方案1】:

这是一个历史上的奇怪现象,在喜欢盲目应用他们不理解的编码标准的团队中仍然很常见。

很久以前,大多数商业编程语言都是弱类型的;我们现在认为理所当然的自动类型检查仍然主要是一个学术话题。这意味着很容易编写带有类别错误的代码;它会编译并运行,但会以难以诊断的方式出错。为了减少这些错误,一个名为 Simonyi 的小伙子建议您在每个变量名称的开头使用一个标签来指示其(概念)类型,以便在它们被误用时更容易发现。由于他是匈牙利人,这种做法被称为“匈牙利符号”。

一段时间后,随着类型语言(尤其是 C)变得越来越流行,一些白痴听说这是个好主意,但不明白它的目的。他们建议为每个变量添加冗余标签,以指示其声明的类型。它们的唯一用途是更容易检查变量的类型;除非有人更改了类型并忘记更新标签,在这种情况下他们是有害的。

第二种(无用的)形式更容易描述和执行,因此被许多团队盲目采用;几十年后,你仍然会看到它不时被使用,甚至被提倡。

"c" 是 "char" 类型的标记,因此它不能也用于 "const";所以选择了“k”,因为它是德语中“konstant”的第一个字母,并且广泛用于数学中的常数。

【讨论】:

  • 如果您删除主观和争论的部分,我可以接受这个答案;)
  • 你能给出这个故事的参考吗?这根本不是我所知道的故事。我知道他们的故事是匈牙利符号被广泛滥用,尤其是在微软。特殊前缀或后缀字符旨在以团队理解的简洁方式提供有关数据的额外信息。静态类型从来都不是它的一部分。今天人们(我自己也是)仍然通常在成员数据名称后附加下划线。这也是匈牙利符号。
  • @wilhelmtell:在en.wikipedia.org/wiki/Hungarian_notation 上有一个合理的解释,而 Simonyi 关于所谓的“Apps Hungarian”(第一个变体)的论文可以在msdn2.microsoft.com/en-us/library/aa260976(VS.60).aspx 上找到。我找不到任何关于“Systems Hungarian”(无用变体)的明确说明;正如你所说,这起源于微软,当他们认为这不是一个好主意时,它可能从历史上消失了。
  • 所以你是说谷歌的每个人都是天才?
  • Joel Spolsky 的 Making Wrong Code Look Wrong 文章对 Apps Hungarian 和 Systems Hungarian 的历史进行了有趣的(和往常一样)描述。
【解决方案2】:

我没见过那么多,但它可能来自某些语言(尤其是日耳曼语)对单词 constant - konstant 的拼写。

【讨论】:

    【解决方案3】:

    不要使用匈牙利符号。如果您希望常量突出,请将它们全部大写。

    附带说明:Google 编码标准中有很多东西是不好的做法(在代码可读性方面)。当您由委员会设计编码标准时,就会发生这种情况。

    【讨论】:

    • 可以说所有大写字母只是匈牙利符号的一种稍微不同的形式。两者都只是传达语义含义的约定。
    • 匈牙利表示法是在变量名(极端情况下,类名和方法名)前加上其类型缩写的做法。全部大写保持代码的可读性,而不会导致新手程序员问“为什么'k'在那里?”。所以不,不能说它是匈牙利符号的“不同形式”。
    • 全部大写的问题是它通常更难阅读,或者研究表明。
    • 如果整个程序都是大写的,是的。如果您有一个在所有大写字母中定义的常量,则没有。它只是让它脱颖而出:const int MYCONST = 3; if (MYCONST == x) {...}
    • "不要使用 use Hungarian Notation,因为它是任意命名约定,而是使用这个任意命名约定!"是我得到的氛围。尼克·福吉是对的。以新手程序员为例甚至是无效的。因为他们会问为什么一个变量用大写字母命名。如果你需要向他们解释。然后解释为什么某些变量以'k'为前缀没有什么不同。反对匈牙利表示法的唯一有效论点是在它前面加上 u32 或 f64 之类的类型。
    【解决方案4】:

    我认为数学惯例是先例。 k 在数学中一直用作一些常数。

    【讨论】:

      【解决方案5】:

      表示该值为k-onstant。

      【讨论】:

      • 同意...但是常量用c拼写,那为什么不用c呢?
      • @doron:我以为 C 代表类。
      • @doron:我认为 c 代表 char。但话又说回来,它也可能用于 container、collat​​ion、collection、common。避免这种风格的另一个原因。
      【解决方案6】:

      K 代表 konstant,一个关于常量的文字游戏。它与编码风格有关。

      这只是一个偏好问题,一些人和项目使用它们,这意味着他们也接受匈牙利符号,许多人不这样做。这没那么重要。

      如果您不确定前缀或样式可能意味着什么,请始终检查项目是否有编码样式参考并阅读。

      【讨论】:

        【解决方案7】:

        这是一个约定,可能来自数学。但也有其他关于常量的建议,例如 Kernighan 和 Ritchie 在他们的《C 语言》一书中建议用大写字母书写常量的名称(例如 #define MAX 55)。

        【讨论】:

        • 我看到很多,ALL_CAPS 用于#defines,k 用于const。
        【解决方案8】:

        我认为,它的意思是系数(就像数学中的 k 的意思)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多