C++ 常量的k前缀来自哪里?

C++ 常量的k前缀来自哪里?,c++,objective-c,c,prefix,hungarian-notation,C++,Objective C,C,Prefix,Hungarian Notation,常量的前缀是k(例如k_pi),这是一种非常常见的做法。但是k是什么意思呢 是不是因为c已经意味着char?它意味着值是k-onstant。我没怎么见过它,但它可能来自于某些语言(特别是日耳曼语)对单词constant的拼写 我认为数学惯例是先例。在数学中,k一直被用作常数。k代表常数,一种关于常数的文字游戏。它与编码风格有关 这只是一个偏好的问题,一些人和项目使用它们,这意味着他们也接受匈牙利符号,而许多人不这样做。那没那么重要 如果您不确定前缀或样式可能意味着什么,请始终检查项目是否有编码样

常量的前缀是
k
(例如
k_pi
),这是一种非常常见的做法。但是
k
是什么意思呢


是不是因为
c
已经意味着
char

它意味着值是k-onstant。

我没怎么见过它,但它可能来自于某些语言(特别是日耳曼语)对单词constant的拼写

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

k代表常数,一种关于常数的文字游戏。它与编码风格有关

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


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

不要使用匈牙利符号。如果你想让常数脱颖而出,就把它们都做成大写


顺便说一句:谷歌编码标准中有很多做法都很糟糕(在代码可读性方面)。这就是委员会设计编码标准时会发生的情况。

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

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

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

第二种(无用的)形式更容易描述和实施,所以它被很多很多团队盲目采用;几十年后,你仍然会不时地看到它被使用,甚至被提倡



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

这是一种惯例,可能来自数学。但也有其他的建议,例如Kernighan和里奇在他们的书《C语言》中建议用大写字母写常数(例如,定义最大值55)。我认为,这意味着系数(如数学方法中的K)< /P>这不是很常见,我从来没有在C++中看到过。在COCOA中,它也被用过了。所以你至少有两家世界上最大的软件公司在使用它。@jon:这很普遍,我工作的公司标准中都有使用它,而且它在谷歌出现之前就已经建立起来了(更不用说它已经过时了……)它可能不常见,但肯定是kommon。它的目的是辩论,这是不使用这种风格的一个很好的理由。可读性的一个目标是减少混淆和替代意义。。。但常量是用c拼写的,为什么不用c呢?@doron:我以为c代表类。@doron:我以为c代表字符
char
。但话说回来,它也可以用于容器、排序规则、集合、公共。避免这种风格的另一个原因。我已经看到了很多,所有的_CAPS都用于#defines,k用于const。如果去掉主观和争论的部分,我可以接受这个答案;)你能提到这个故事吗?我所知道的完全不是这个故事。据我所知,匈牙利符号被广泛滥用,尤其是在微软。特殊的前缀或后缀字符旨在以团队理解的简洁方式提供有关数据的额外信息。静态类型从来就不是它的一部分。今天,人们(我自己也是)仍然通常在成员数据名后面加下划线。这也是匈牙利符号。@wilhelmtell:在上有一个合理的解释,Simonyi关于被称为“Apps Hungarian”(第一个变体)的论文可在上找到。我找不到任何关于“匈牙利系统”(无用的变体)的确切描述;正如你所说,这起源于微软,当他们认为这不是一个好主意时,它可能从历史上消失了。那么你是说谷歌的每个人都是天才吗?乔尔·斯波尔斯基(Joel Spolsky)的文章有一个有趣的(和往常一样)关于应用程序匈牙利语和系统匈牙利语历史的叙述。可以说,所有大写字母只是匈牙利符号的一种稍有不同的形式。这两种方法都只是传达语义的一种惯例。匈牙利符号是在变量名(在极端情况下,还有类名和方法名)前面加上类型缩写的做法。所有caps都保持代码的可读性,而不会导致新手程序员问“为什么有‘k’?”。因此,不,不能说它是匈牙利符号的“不同形式”。所有大写字母的问题是,通常很难阅读,或者研究表明是这样。如果整个程序都是大写字母,是的。如果您有一个在所有CAP中定义的常量,则不会。它只会让它显得与众不同:
const int MYCONST=3;如果(MYCONST==x){…}
“不要使用匈牙利符号,因为它的任意命名约定,请使用此任意命名约定!”。尼克·福吉是对的。使用新手程序员作为e