Search code examples
c++nestedextern

What happens if you nest extern "C"?


It looks like nesting extern "C" is legal. For example:

extern "C" extern "C" void foo();

The second extern "C" is essentially ignored. Is that guaranteed by the C++ standard? Where?


Solution

  • Yes, but it's actually the first extern "C" that's ignored. To quote the standard [dcl.link]:

    Linkage specifications nest. When linkage specifications nest, the innermost one determines the language linkage.