Clarification for 7-3-1: extern "C++" - Printable Version +- MISRA Discussion Forums (https://forum.misra.org.uk) +-- Forum: MISRA C++ (https://forum.misra.org.uk/forumdisplay.php?fid=18) +--- Forum: MISRA C++:2008 rules (https://forum.misra.org.uk/forumdisplay.php?fid=19) +---- Forum: 6.7 Declarations (C++) (https://forum.misra.org.uk/forumdisplay.php?fid=136) +---- Thread: Clarification for 7-3-1: extern "C++" (/showthread.php?tid=1241) |
Clarification for 7-3-1: extern "C++" - anj - 28-04-2016 For headers included by other C and C++ headers it is vital to use extern "C++". But the rule implicitly forbids it by only allowing 3 kind of top level declarations. Is it really intended to use this as the only compliant way: Code: extern "C" Re: Clarification for 7-3-1: extern "C++" - dg1980 - 29-04-2016 I have to disagree, 7-3-1 is not the problem here, 16-2-1 is (see http://www.misra.org.uk/forum/viewtopic.php?f=200&t=1549#p3031) Typically, in mixed C/C++ applications, you require extern "C" in the C Header only, because the C Module is compiled with a C Compiler and the C++ Module with a C++ Compiler. If the C Header is checked with MISRA C++ (because the C++ module is), you break 16-2-1 (illustration below). legacy.h Code: #ifndef LEGACY_H Code: #include "legacy.h" Code: #include "legacy.h"// compliant, no extern "C" required either I think MISRA has not put much thought into mixed C/C++ scenarios. Re: Clarification for 7-3-1: extern "C++" - misra cpp - 11-10-2016 The preferred solution is as suggested by dg1980, with a deviation for the 16-2-1 violation |