タグ付けされた質問 「extern」

17
externを使用してソースファイル間で変数を共有するにはどうすればよいですか?
Cのグローバル変数にはexternキーワードがある場合があることを知っています。extern変数とは何ですか?宣言はどのようなものですか?その範囲は何ですか? これはソースファイル間で変数を共有することに関連していますが、それはどのように正確に機能しますか?どこで使用しexternますか?

1
「FOUNDATION_EXPORT」と「extern」
私が使用しての背後にある理由何お願いしたいFOUNDATION_EXPORTの代わりexternに目的のCプロジェクト。 私はこの質問を確認し、使用するとFOUNDATION_EXPORTなんと340ポイント(1位)を獲得しましたが、extern74ポイント(2位)しか使用していません。 なぜ誰かが説明できますか?のFOUNDATION_EXPORT代わりに使用する実用的な理由はありますexternか? ありがとう!

5
externテンプレートの使用(C ++ 11)
図1: 関数テンプレート TemplHeader.h template<typename T> void f(); TemplCpp.cpp template<typename T> void f(){ //... } //explicit instantation template void f<T>(); Main.cpp #include "TemplHeader.h" extern template void f<T>(); //is this correct? int main() { f<char>(); return 0; } これはを使用する正しい方法ですかextern template、またはこのキーワードを図2のようにクラステンプレートにのみ使用しますか? 図2:クラステンプレート TemplHeader.h template<typename T> class foo { T f(); }; TemplCpp.cpp template<typename …
116 c++  templates  c++11  extern 

6
extern inlineは何をしますか?
私inlineはそれ自体がコンパイラへの提案であり、その裁量で関数をインライン化することもしないこともあり、リンク可能なオブジェクトコードも生成することを理解しています。 私static inlineは同じことをすると思いますが(インライン化してもしなくても)、インライン化するとリンク可能なオブジェクトコードを生成しません(他のモジュールがリンクできないため)。 写真のどこにextern inline収まるのですか? プリプロセッサマクロをインライン関数で置き換え、この関数をインライン化する必要があるとします(たとえば、呼び出し元に対して解決する必要がある__FILE__と__LINE__マクロを使用するため、この呼び出された関数ではないため)。つまり、関数がインライン化されない場合に備えて、コンパイラーまたはリンカーのエラーを表示します。extern inlineこれを行いますか?(そうでない場合は、マクロを使用する以外にこの動作を実現する方法はないと思います。) C ++とCの間に違いはありますか? コンパイラのベンダーとバージョンの違いはありますか?

1
異なるブロックの同じ名前のexternローカル変数が、c ++のコンパイラー間で異なるリンケージを取得するのはなぜですか?
externローカル変数 にどのリンケージが許可されているかを確認しているだけですが、コンパイラ間でいくつかの異なる動作があることがわかりました たとえば 、コメント変数で見られるように、以下のコードをテストした場合、変数varのリンケージは異なります // foo.cpp int var = 10; // external linkage // main.cpp #include <iostream> static int var = 100; // internal linkage int main() { extern int var; // internal linkage std::cout << var << std::endl; { extern int var; // g++: external linkage , clang++: internal …
12 c++  g++  clang++  extern  linkage 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.