The symbol underscore, , also called underline, underdash, low line, or low dash, is a character that originally appeared on the typewriter and was primarily used to underline words. To produce an underlined word, the word was typed, the typewriter carriage was moved back to the beginning of the word, and the word was overtyped with the underscore character. This character is often used to create visual spacing within a sequence of characters, where a whitespace character is not permitted. Some computer applications will automatically emphasize text surrounded by underscores either by underlining or by italicizing it. In contexts where no formatting is supported such as in IRC, instant messaging, or older email formats, the enclosing underscore markup is sometimes used as a proxy for underlining the word enclosed. A variant,, is used in the Province of Quebec to underline superscripts. In some languages, the mark is used as combining diacritic and is called a "combining low line".
The underscore is not the same character as the dash character, although one convention for text news wires is to use an underscore when an em-dash or en-dash is desired, or when other non-standard characters such as bullets would be appropriate. The combining diacritic,, is similar to the combining low line but its mark is shorter. The difference between "macron below" and "low line" is that the latter results in an unbroken underline when it is run together: compare and .
Modern use
In printed documents underlining is generally avoided, with italics or small caps often used instead, or using capitalization or bold type. In a manuscript to be typeset, Underline|Manuscripts|various forms of underlining were therefore conventionally used to indicate that text should be set in special type such as italics, part of a procedure known as markup. A series of underscores may be used to create a blank to be filled in on a form. It is also sometimes used to create a horizontal line; other symbols with similar graphemes, such as hyphens and dashes, are also used for this purpose.
Usage in computing
History
As early output devices could not produce more than one character at a location, it was not possible to underscore text, so common character sets of the 1950s had no underscore. IBM's EBCDIC character-coding system, introduced in 1964, added the underscore, which IBM referred to as the "break character". IBM's report on NPL leaves the character set undefined, but specifically mentions the break character, and gives RATE_OF_PAY as an example identifier. By 1967 the underscore had spread to ASCII, replacing the similarly-shaped left-arrow character,, previously residing at code point 95 in ASCII-1963. C, developed at Bell Labs in the early 1970s, allowed the underscore as an alphabetic character. Underscore predates the existence of lower-case letters in many systems, so often it had to be used to make multi-word identifiers, since CamelCase was not available.
Programming conventions
Underscores inserted between letters are very common to make a "multi word" identifier in languages that cannot handle spaces in identifiers. This convention is known as "snake case". An underscore as the first character in an ID is often used to indicate internal implementation that is not considered part of the API and should not be called by code outside that implementation. Python uses this for private member variables of classes, this is common in other languages such as C++ even though those provide keywords to indicate that members are private. It is extensively used to hide variables and functions used for implementations in header files. In fact the use of single underscore for this became so common that C compilers had to standardize on a double leading underscore for actual built-in variables to avoid conflicts with the ones in header files. Python uses double underscore to "mangle" a private id to make it much harder to refer to it, and "PHP reserves all function names starting with __ as magical." A variable named with just an underscore often has special meaning. $_ or _ is the previous command or result in many interactive shells, such as those of Python, Ruby, and Perl. In Perl, @_ is a special array variable that holds the arguments to a function. In Clojure, it indicates an argument whose value will be ignored. In some languages with pattern matching, such as Prolog, Standard ML, Scala, OCaml, Haskell, Erlang and Wolfram Language, the pattern _ matches any value, but does not perform binding.