5

コードの一部が C と C++ の両方で有効であるが、各言語で異なる動作を生成するシナリオについて議論している SO に関する質問を読んだところです。

これは疑問を投げかけます: C ヘッダーを C++ コードにインクルードするときにこれが問題になることはありますか?

この質問から、次のような C ヘッダーを含める必要があることがわかります。

extern "C" {
#include <your_os_or_library_header_in_c.h>
}

しかし、私がこれまでに見つけたのは、extern "C" は、名前マングリングがオフになっていることを保証するだけだということだけです。

すべてのステートメントを C として評価するかどうかに関する情報を見つけることができなかったので、eg sizeof('a')or 10 //* comment */ 2(インライン関数で見つけることができます) は C++ ではなく C として解析されます。(誰かが C ヘッダーを書くような振る舞いに依存するのは明らかに悪い考えであることに注意してください。しかし、私は純粋に「もしも?」という学術的な観点からそれを尋ねています。)

C++ 標準では、コードのブロックを で囲むことextern "C"は、その中のすべてのステートメントを C として解析する必要があると言っていますか?

4

2 に答える 2