Where does the k prefix for constants come from?

21,934

Solution 1

I haven't seen it that much, but maybe it comes from certain languages' (the germanic ones in particular) spelling of the word constant - konstant.

Solution 2

It's a historical oddity, still common practice among teams who like to blindly apply coding standards that they don't understand.

Long ago, most commercial programming languages were weakly typed; automatic type checking, which we take for granted now, was still mostly an academic topic. This meant that is was easy to write code with category errors; it would compile and run, but go wrong in ways that were hard to diagnose. To reduce these errors, a chap called Simonyi suggested that you begin each variable name with a tag to indicate its (conceptual) type, making it easier to spot when they were misused. Since he was Hungarian, the practise became known as "Hungarian notation".

Some time later, as typed languages (particularly C) became more popular, some idiots heard that this was a good idea, but didn't understand its purpose. They proposed adding redundant tags to each variable, to indicate its declared type. The only use for them is to make it easier to check the type of a variable; unless someone has changed the type and forgotten to update the tag, in which case they are actively harmful.

The second (useless) form was easier to describe and enforce, so it was blindly adopted by many, many teams; decades later, you still see it used, and even advocated, from time to time.

"c" was the tag for type "char", so it couldn't also be used for "const"; so "k" was chosen, since that's the first letter of "konstant" in German, and is widely used for constants in mathematics.

Solution 3

Don't use Hungarian Notation. If you want constants to stand out, make them all caps.

As a side note: there are a lot of things in the Google Coding Standards that are poor practice (in terms of code readability). That is what happens when you design a coding standard by committee.

Solution 4

I think mathematical convention was the precedent. k is used in maths all the time as just some constant.

Solution 5

It means the value is k-onstant.

Share:
21,934
Johan Kotlinski
Author by

Johan Kotlinski

Hi! I'm a software engineer specialized in realtime and embedded programming. I like the following programming languages: C++, Python, C, Forth, Lisp, Haskell, Objective-C, OCaml, assembler. Of these, I use C++ the most. A good C++ reference: http://yosefk.com/c++fqa/

Updated on July 09, 2022

Comments

  • Johan Kotlinski
    Johan Kotlinski almost 2 years

    it's a pretty common practice that constants are prefixed with k (e.g. k_pi). But what does the k mean?

    Is it simply that c already meant char?

  • Johan Kotlinski
    Johan Kotlinski about 13 years
    Agreed... but constant is spelled with c, so why not c?
  • Johan Kotlinski
    Johan Kotlinski about 13 years
    I have seen a lot that ALL_CAPS is used for #defines, k is used for const.
  • Johan Kotlinski
    Johan Kotlinski about 13 years
    I could accept this answer if you remove the subjective and argumentative parts ;)
  • UncleBens
    UncleBens about 13 years
    @doron: I thought C stands for class.
  • Dean Burge
    Dean Burge about 13 years
    Can you give references to this story? That's not at all the story I know. They story I know is that Hungarian notation was broadly misused, particularly at Microsoft. The special prefix or suffix characters were meant to give extra information about the data, in a concise manner that the team understands. Static types were never meant to be part of it. Today people (myself too) still commonly append an underscore to member data names. That too is Hungarian notation.
  • Mike Seymour
    Mike Seymour about 13 years
    @wilhelmtell: There's a reasonable account of it at en.wikipedia.org/wiki/Hungarian_notation, and Simonyi's paper on what became known as "Apps Hungarian" (the first variant) is available at msdn2.microsoft.com/en-us/library/aa260976(VS.60).aspx. I can't find any definitive account of "Systems Hungarian" (the useless variant); as you say, this originated in Microsoft, and presumably it vanished from history when they decided it wasn't a good idea.
  • Thomas Matthews
    Thomas Matthews about 13 years
    @doron: I thought c stands for char. But then again, it could also be for container, collation, collection, common. Another reason to avoid this style.
  • Johan Kotlinski
    Johan Kotlinski about 13 years
    It might entertain you to know, I worked some with Windows Media codec - the amount of Hungarian notation there was really bizarre. Personally I just enjoy some basic ones (const+scope), so I instantly get an idea about what some code does.
  • misiu_mp
    misiu_mp about 13 years
    Was google coding standard designed by a committee? What kind of committee was it?
  • Nick Forge
    Nick Forge almost 11 years
    It could be argued that all caps is just a slightly different form of Hungarian Notation. Both are simply a convention to communicate semantic meaning.
  • Zac Howland
    Zac Howland almost 11 years
    Hungarian Notation is the practice of prefixing variable names (and in extreme cases, class names and method names as well) with abbreviations for their types. All caps maintains the readability of the code without causing a novice programmer to ask "Why is the 'k' there?". So no, it cannot be argued it is a "different form" of Hungarian Notation.
  • szx
    szx over 10 years
    So people in Google are idiots? google-styleguide.googlecode.com/svn/trunk/…
  • Steven Craft
    Steven Craft over 10 years
    Problem with all caps is it is generally harder to read, or so the studies say.
  • Zac Howland
    Zac Howland over 10 years
    If the entire program is all caps, yes. If you have a constant that is defined in all caps, no. It just makes it stand out: const int MYCONST = 3; if (MYCONST == x) {...}
  • jimpic
    jimpic almost 10 years
    So you are saying everyone at Google is a genius?
  • pjh
    pjh over 5 years
    Joel Spolsky's Making Wrong Code Look Wrong article has an interesting (as usual) account of the history of Apps Hungarian and Systems Hungarian.
  • A. L
    A. L about 3 years
    "Don't use use Hungarian Notation because of its arbitrary naming convention, use this arbitrary naming convention instead!" Is the vibe I get. Nick Forge is right. Using a novice programmer as an example isn't even valid. Because they would ask why a variable is named with all caps. And if you need to explain it to them. Then explaining why certain variables are prefixed with 'k' is no different. The only valid argument against Hungarian notation is prefixing it with types like u32 or f64.