問題タブ [extern-c]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - extern "C"{ #include が必要な理由C++で?
なぜ使用する必要があるのですか:
具体的には:
いつ使用する必要がありますか?
それを使用する必要があるコンパイラ/リンカーレベルで何が起こっているのですか?
コンパイル/リンクに関して、これを使用する必要がある問題をどのように解決しますか?
c++ - C++ で C 構造体をサブクラス化し、C コードで構造体へのポインターを使用することは可能ですか?
これを行う際に副作用はありますか:
C コード:
C++ コード:
C++ コードの周りに がありextern "C"
、各コードは独自のコンパイル ユニット内にあります。
これはコンパイラ間で移植可能ですか?
c++ - static vs extern "C"/"C++"
静的メンバー関数と extern "C" リンケージ関数の違いは何ですか? たとえば、C++ で「makecontext」を使用する場合、関数へのポインターを渡す必要があります。「makecontext」はCであるため、Googleはextern「C」リンケージを使用することをお勧めします。しかし、静的を使用しても同様に機能することがわかりました。私は運がいいのか、それとも…
対
EDIT:静的メンバーバージョンが機能しないコンパイラまたはアーキテクチャを表示できますか(コンパイラのバグではありません)?
c++ - extern "C" は C で何らかの効果がありますか?
extern "C" を使用して次のような外部関数を宣言する C コードを取得しました。
これは有効な C ですか? この行でエラーが発生していますが、これが原因なのか他の理由なのかわかりません。
c++ - C++でのextern"C"の効果は何ですか?
C ++コードに入れることは正確に何をextern "C"
しますか?
例えば:
c++ - C++ で extern "C" を使用するのはいつですか?
次のようにコーディングされたプログラムをよく見てきました。
extern "C"
ブロックを使用する理由 これを C++ の何かに置き換えることはできますか? を使用する利点はありますextern "C"
か?
これを説明するリンクが表示されますが、既に C++ があるのに、なぜ C で何かをコンパイルする必要があるのでしょうか?
c++ - extern "C" は関数宣言でのみ必要ですか?
C プログラムから呼び出す必要がある C++ 関数を作成しました。Cから呼び出せるようにするためextern "C"
に、関数宣言に を指定しました。次に、C++ コードをコンパイルしましたが、コンパイラ (Dignus Systems/C++) が関数のマングル名を生成しました。したがって、どうやらextern "C"
.
これを解決するためextern "C"
に、関数定義に を追加しました。この後、コンパイラは C から呼び出し可能な関数名を生成しました。
技術的にはextern "C"
、関数宣言でのみ指定する必要があります。これは正しいですか?( C++ FAQにこれの良い例があります。) 関数定義でも指定する必要がありますか?
これを示す例を次に示します。
私の問題は、何かを誤ってコーディングした結果である可能性があります。または、コンパイラのバグを見つけた可能性があります。いずれにせよ、stackoverflow に相談して、技術的にどちらが「正しい」方法であるかを確認したかったのです。
c++ - extern "C"宣言はどのように機能しますか?
私はプログラミング言語のコースを受講していて、extern "C"
宣言について話している。
この宣言は、「CとC ++のインターフェイス」以外のより深いレベルでどのように機能しますか?これは、プログラムで行われるバインディングにもどのように影響しますか?
c++ - C関数へのC++コールバックに「externC」が必要なのはなぜですか?
私はそのような例をBoostコードで見つけます。
なぜ実際にこれが必要なのextern "C"
ですか?
関数がプライベート内部であることは明らかであり、thread_proxy
実際にはマングルする必要がまったくないため、「thread_proxy」としてマングルされることはないと思います。
実際、私が作成し、多くのプラットフォームで実行されるすべてのコードで、使用extern "C"
したことはなく、これは通常の関数でそのまま機能していました。
なぜextern "C"
追加されるのですか?
私の問題は、extern "C"
関数がグローバル名前空間を汚染し、作成者が期待するように実際には隠されていないことです。
これは重複ではありません! 私はマングリングと外部リンケージについて話しているのではありません。このコードでは、外部リンケージが不要であることは明らかです。
回答: C関数とC ++関数の呼び出し規約は必ずしも同じではないため、Cの呼び出し規約を使用して作成する必要があります。C ++標準の7.5(p4)を参照してください。
c++ - CからC++関数を呼び出す方法は?
私はこれを知っている。
C++ から C 関数を呼び出す:
私のアプリケーションが C++ で書かれていて、C で書かれたライブラリから関数を呼び出さなければならなかった場合、
これは名前を台無しにすることはなくC_library_function
、リンカーは入力 *.lib ファイルで同じ名前を見つけ、問題は解決されます。
CからC++関数を呼び出す???
しかし、ここでは C で書かれた大規模なアプリケーションを拡張しており、C++ で書かれたライブラリを使用する必要があります。ここでは、C++ の名前マングリングが問題を引き起こしています。リンカーは、未解決のシンボルについて不平を言っています。CプロジェクトでC++コンパイラを使用することはできません。これは他の多くのものを壊してしまうからです。抜け道は何ですか?
ちなみに私はMSVCを使っています