cembedded

What is the purpose of using #ifdef _LANGUAGE_C in VisualDSP++?


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.

  1. What is the purpose of using #ifdef _LANGUAGE_C?
  2. Wouldn't this just keep your code from running on a different compiler that may not have a macro defined for _LANGUAGE_C?

Solution

  • 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 a struct definition 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.