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)