What is this #ifdef __GNUC__ about?

alvas picture alvas · Nov 11, 2013 · Viewed 27.7k times · Source

I've found these lines in the libmagic code. What do they mean?

#ifdef __GNUC__
__attribute__((unused))
#endif 

What does __GNUC__ mean?
It seems to check whether GCC is installed.

What is __attribute__((unused))?
There's a code snippet here but no explanation: How do I best silence a warning about unused variables?

What is the difference between __GNUC__ and _MSC_VER?
There's some explanation on _MSC_VER, but what is it all about?
How to Detect if I'm Compiling Code with a particular Visual Studio version?

Finally the question:
How can I do the same #ifdef to check which compiler is compiling my code?

Answer

masoud picture masoud · Nov 11, 2013

It's common in compilers to define macros to determine what compiler they are, what version is that, ... a portable C++ code can use them to find out that it can use a specific feature or not.

What does __GNUC__ mean?

It indicates that I'm a GNU compiler and you can use GNU extensions. [1]

 

What is __attribute__((unused))?

This attribute, attached to a variable, means that the variable is meant to be possibly unused. GCC will not produce an unused-variable-warning for this variable. [2]

 

What is the difference between __GNUC__ and _MSC_VER?

They're two unrelated macros. First one says I'm am a GNU compiler and second one says the version number of MS compilers. However, MS compilers are not suppose to support GNU extensions.

 

How can I do the same #ifdef to check whether OS is compiling my python code using GNU and MS visual studios?

#if (defined(__GNU__) && defined(_MSC_VER))
   // ...
#endif