Hungarian

Hungarian notation, named for the nationality of Microsoft programmer Charles Simonyi, is a way to name data variables so their data type is immediately apparent. This involves giving the variable an initial lowercase letter or letters that denote the type, followed by a descriptive name in mixed uppercase and lowercase, for example:

WORD wBufferSize;

DWORD dwFileSize;

Table B.4 shows Hungarian prefixes and the data types they correspond to.

Table 0.4 Hungarian Notation Naming Conventions

Prefix Data Type

b BOOL (int)
by BYTE (unsigned char)
c char
dw DWORD (unsigned long)
fn function
h HANDLE (unsigned int)
i int
l LONG (long)
n short or int
s string
sz string terminated by NULL (0)
w WORD (unsigned int)
x short (when used as x coordinate or dimension)
y short (when used as y coordinate or dimension)

These prefixes can also be prefaced by another letter or series of letters, listed in Table B.5, to indicate a pointer. (For a complete discussion of pointers, see Chapter 8.)

Table 0.5 Hungarian Notation Naming Conventions (Pointers)

Prefix Data Type

lp long or far pointer
np short or near pointer
p pointer

For example, the variable lpszCmdLine is a LPSTR Windows data type (far pointer to a NULL-terminated string). This variable could be declared as:

char FAR *lpszCmdLine;

or

LPSTR lpszCmdLine;

Although it takes a while to learn, Hungarian is useful for avoiding and quickly locating errors in Windows or standard C programs.