Что произойдет, если я использую extern «C ++» с C toolchain?

Мой вопрос в основном о том, что C ++ toolchain «понимает» как C, так и C ++, поэтому, если я передаю некоторый код с помощью extern "C" в c ++ toolchain, я предполагаю, что он может понять, что с этим делать; но что, если я кормлю код с помощью extern "C++" в C toolchain?

Каково ожидаемое поведение?

Если компилятор ALSO понимает C ++, он может принять его. Если это чистый компилятор C, он будет возражать (как и на extern "C" поскольку этот синтаксис недействителен C – вот почему он обычно заключен в #ifdef __cplusplus или некоторые такие)

Предполагается, что он не компилируется, это недействительный синтаксис C.

Стандартный подход, чтобы сделать объявления C в файле заголовка работать как в компиляторе C, так и в C ++, заключается в том, чтобы полагаться на символ препроцессора, который определен только в компиляторе C ++. Как это:

 #ifdef __cplusplus extern "C" { #endif // C declarations here // ... #ifdef __cplusplus } #endif 

Каждый компилятор C ++ определяет __cplusplus.

extern "C++" недействителен C-кодом, поэтому соответствующий компилятор C должен выдать диагностику. Нет требования, чтобы он не скомпилировал код. Выпустив диагностику, компилятор имеет право делать все, что было определено его разработчиком.

Если вы написали какой-то другой компилятор с таким вариантом, вы можете это сделать.

Как ответил @Mats, у нас есть еще одна процедура для этого: #ifdef __cplusplus . Более того, что вы пытаетесь, это только ошибка.