This code does not compile for me on gcc version 4.3.2 (Debian 4.3.2-1.1)
main(){
int unix;
}
I've checked the C keywords list and "unix" is not one of them. Why am I getting the following error?
unix.c:2: error: expected identifier or ‘(’ before numeric constant
Anybody?
unix is one of the defines the preprocessor uses in gcc to get a list of defs use
(-dM tells gcc to debugdump the defs -E tells it to stop after prepreocessing and -x c /dev/null tells him to pretend /dev/null is a c file)
To answer your question, no
unix
is not a reserved word in C.However, the symbol
unix
is most likely defined by the preprocessor either because you include a header file or because the compiler defines it.Run your code through the preprocessor to find out what the compiler is actually seeing:
Then see if your variable
unix
is preserved or converted by the preprocessor.I'm gona take a wild stab at this and guess that gcc effectively #defined unix as 1 on UNIX systems.
try
and see what you get.
unix
is not a identifier reserved by the Standard.If you compile with
-std=c89
or-std=c99
the gcc compiler will accept the program as you expected.From gcc manual ( https://gcc.gnu.org/onlinedocs/cpp/System-specific-Predefined-Macros.html ), the emphasis is mine.
It is not a keyword.
It is a predefined macro to identify the type of system. On Unix and Unix like systems it is defined to be
1
.To disable this use the
-ansi
option: