Not reserved words but predefined macros when the compiler is running on a Linux/Unix environment.
Try, on the command line, to run the following command to list all these macros:
gcc -dM < /dev/null
The two words linux and Unix have the following definition:
gcc -dM < /dev/null | grep linux
#define __linux 1
#define __linux__ 1
#define __gnu_linux__ 1
#define linux 1
gcc -dM < /dev/null | grep unix
#define __unix__ 1
#define __unix 1
#define unix 1
1989 ANSI C standard introduced rules that require a macro name to be started by two underscores or an underscore followed by a letter maisculas.
You can say that gcc by default "doesn’t respect" those same rules, meaning you can’t do something like
int main() {
int unix = 10;
}
This will generate the following message:
error: expected identifier or '(' before numeric constant
int unix = 10;
As @pmg indicated in his reply, you can change this behavior using the options:
gcc -std=c90 -pedantic
gcc -std=c99 -pedantic
gcc -std=c11 -pedantic