Search code examples
cvisual-studiogccpredefined-macro

What is this #ifdef __GNUC__ about?


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?


Solution

  • 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 supposed 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
    

    However, there is no chance of having both these conditions!