問題タブ [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.

0 投票する
2 に答える
978 参照

c++ - メソッドのないヘッダーで extern "C" を使用する理由はありますか?

extern "C"ガードを含む C ヘッダー ファイルをよく見かけますが
、実際の関数は含まれていません。例えば:

関数の名前マングリングを防ぐことは知っていextern "C"ますが、変数や型の宣言に関する他のインターフェイスの問題も防ぐことができますか?

上記の例での の使用はextern "C"、結果として生じる互換性に関して無意味ですか?

0 投票する
1 に答える
401 参照

c++ - C++ での不明な属性 `extern_c` 警告

Android NDK を使用して、Mac で Android 用の Cocos2d-x ゲームをビルドしています。C++ 部分をコンパイルすると、次のような多くの警告が表示されます。

それは危険ですか?どうすれば修正できますか?

0 投票する
1 に答える
211 参照

c++ - C プロジェクトで C++ 関数へのポインターを渡す

私は巨大なCプロジェクトを持っています。そして今、いくつかの変数を埋めるために C++ 関数が必要でした。

関数を extern "C" として宣言することで、C プロジェクトから関数を呼び出すことは問題ありませんでした。

問題は、C++ 関数にポインターを渡す必要があり、関数内でポインターに値を割り当てたいということです。しかし、まさにこの時点で、プログラムは「セグメンテーション違反」でクラッシュします。

これを機能させる方法はありますか?それとも、C と C++ の間でこの方法でポインターを操作することは不可能ですか?


C で関数をスレッドとして呼び出す:

ヘッダ

C++ 関数

0 投票する
2 に答える
670 参照

c++ - C 関数ポインターに配置できる C++ 関数の種類は何ですか?

コールバックに関数ポインタの構造体を使用する C ライブラリがあります。コールバックは C コードから呼び出されます。

C ライブラリから呼び出される関数ポインタに安全に配置できる C++ 関数の種類は何ですか? 静的メンバー関数? 完全に指定されたテンプレート関数? 非キャプチャ ラムダ?

g++ では上記のすべてを使用できるように見えますが、C および C++ 関数に異なる呼び出し規則と言語バインディングが使用されている場合の安全性に疑問があります。

0 投票する
1 に答える
168 参照

c++ - コンパイルされたオブジェクト コード内の extern "C" 関数

環境は Microsoft Visual C++ 2015 と Windows 7 です。

inline extern "C"ヘッダーで定義された関数について何か特別なことはありますか? ヘッダーの 1 つにそのような獣が含まれている SDK を使用しています。私のアプリケーションには、前述のヘッダーを含めることだけが唯一の仕事である TU (翻訳単位) があります。それで全部です。他には何も入っていません。生成されたオブジェクト ファイルを掘り下げると、extern "C"関数が取り込まれていることがわかります。これにより、いくつかの望ましくない副作用が発生しています (主な問題から気をそらす可能性があるため、現時点では省略します)。

なぜこれが起こるのでしょうか?main()クライアント コードからは何も発生していません (エントリ ポイントとそのヘッダーを除いて、私の唯一の TU は空であることを思い出してください)。

私が遭遇していることをよりよく説明するかもしれない小さなスニペットで更新してください:

これが実際に起こっていることです:

FooObj.h

SDKHeader.h

MyFile.cpp

MyFile.cpp を実行可能ファイルにコンパイルすると、リンカーが CallIntoAnotherC_API が未解決の外部であると不平を言って失敗します。

0 投票する
2 に答える
2322 参照

c++ - extern "C" が指定されている場合、Visual Studio で未定義の参照エラーが発生しないのはなぜですか?

このコードを考えると:

A2.H

A1.H

MyTest.cpp

この問題の背景については、こちらを参照してください。

MyTest.cpp が実行可能ファイルにコンパイルされると、リンカーはそれSomeFunc()が未解決の外部であると文句を言います。

これは、A1.h での TriggerIssue の余分な (間違った?) 宣言が原因であると思われます。それをコメントアウトすると、リンカーエラーがなくなります。

誰かがここで何が起こっているのか教えてもらえますか? その宣言の有無でコンパイラの動作が異なる原因を具体的に理解したいだけです。上記のスニペットは、私が遭遇しているシナリオの最小限の検証可能な例を書き込もうとしたものです。なぜそのように書かれているのか、私に聞かないでください。

反対票を投じる方への注意: これは、未解決の外部シンボル エラーを修正する方法に関する質問ではありません。したがって、これを重複として閉じるために投票を停止してください。この質問に「答えがあるかもしれない」と主張しているこの投稿の上部に表示され続けるリンクを削除するのに十分な信用がありません。