I am modifying some code for a Blackfin processor using VisualDSP++ v. 5.0. I have noticed that all of the header files in this project utilize the following convention:
#ifdef _LANGUAGE_C
/* All of the code associated with this header file. */
#endif
After searching through the documentation for this compiler I found the following:
_LANGUAGE_C – Always defined as 1.
So my question is two-fold.
- What is the purpose of using
#ifdef _LANGUAGE_C? - Wouldn’t this just keep your code from running on a different compiler that may not have a macro defined for
_LANGUAGE_C?
You have to look at how it is used in context, however I believe that in this case it is used in headers that are used in both C code and assembler where the assembler code utilises the C pre-processor. It allows C headers to be included in assembler code, and have the preprocessor remove the C code specific elements.
For example it is useful in assembler code to have the same
#define ...constant macro values as the C code to avoid duplication and inconsistency, but astructdefinition or function prototype for example would be meaningless.I would expect perhaps:
#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS), but if the documentation says that it is always defined, perhaps it is defined for both C and C++ compilation in your case.