MISRA Discussion Forums

Full Version: 5.5 and groups of preprocessing
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
such as
Code:
#ifndef NO_TAG
static void log (const char *format, ...)
{
}
#else
#if defined(__STDC_VERSION__)
#define log(...) do { } while (0)    // here
#endif
#endif
and, the identifier(log) exists after preprocssing has been performed:
Code:
static void log (const char *format, ...)   // does it apply to #define log ?
{
}
I have a question regarding rule 5.5: does the function(log) apply to #define log ?
Rule 5.5 amplification states that
Quote: name of macros that exist prior to preprocessing
be distinct from
Quote: identifiers that exist after preprocessing.
Prior to preprocessing there is a macro called "log".

If the code is compiled when NO_TAG is not defined, the code after preprocessing will include a function identifier "log". Under these circumstances, there is a violation of rule 5.5.