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.