[解決済み] C++でexternを使用するタイミング
2022-03-21 01:36:08
質問
Think in C++"を読んでいるのですが、その中で
extern
という宣言があります。例えば
extern int x;
extern float y;
意味(定義のない宣言)はわかったような気がするが、いつ役に立つのだろう。
どなたか例を挙げてください。
どのように解決するのですか?
これは、グローバル変数を持っているときに便利です。を宣言します。 存在 ヘッダーでグローバル変数を定義すると、ヘッダーを含む各ソースファイルはその変数を知っていますが、ソースファイルの1つで1度だけ「定義」する必要があります。
明確にするために
extern int x;
型のオブジェクトが
int
と呼ばれる
x
存在する
どこか
. コンパイラは、その型と名前を知っていれば、それをどのように使うかがわかるだけで、どこに存在するかを知ることは仕事ではありません。すべてのソースファイルがコンパイルされると、リンカーは以下のようなすべての参照を解決します。
x
を、コンパイルされたソースファイルの1つにある1つの定義に変換します。この機能を実現するためには
x
つまり、関数の外側で (通常「ファイルスコープ」と呼ばれる場所) で、かつ
static
キーワードを使用します。
ヘッダを表示します。
#ifndef HEADER_H
#define HEADER_H
// any source file that includes this will be able to use "global_x"
extern int global_x;
void print_global_x();
#endif
ソース1
#include "header.h"
// since global_x still needs to be defined somewhere,
// we define it (for example) in this source file
int global_x;
int main()
{
//set global_x here:
global_x = 5;
print_global_x();
}
ソース2:
#include <iostream>
#include "header.h"
void print_global_x()
{
//print global_x here:
std::cout << global_x << std::endl;
}
関連
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] C++でextern "C "を使用した場合の効果は?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] 仮想デストラクタはいつ使うのか?
-
[解決済み] C++で仮想関数が必要な理由とは?
-
[解決済み] 関数のパラメータに 'const' を使用する
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】C++の余分な資格エラー
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む
-
[解決済み] インライン変数の仕組みは?