In GNU C, you may use dollar signs in identifier names. This is because many traditional C implementations allow such identifiers.
On some machines, dollar signs are allowed in identifiers if you specify
`-traditional
'. On a few systems they are allowed by default,
even if you do not use `-traditional
'. But they are never
allowed if you specify `-ansi
'.
There are certain ANSI C programs (obscure, to be sure) that would compile incorrectly if dollar signs were permitted in identifiers. For example:
#define foo(a) #a #define lose(b) foo (b) #define test$ lose (test)