問題タブ [extern]
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 - -c オプションの有無にかかわらず、gcc が extern グローバル変数を解決しない
だから私はこの問題を抱えています:私は私のCプログラムでいくつかのexternグローバル変数を宣言しています。gcc に -c オプションを使用しないと、未定義の参照エラーが発生します。しかし、その -c オプションでは、リンクは行われません。つまり、実行可能ファイルが生成されていません。
では、どうすればこれを解決できますか?
これが私のmakefileです(Alexに感謝して書かれました)
そして、これが make の出力です: http://pastebin.com/NzsFetrn
私は approx.h (extern および global) で extern 変数を宣言しましたが、approx.c でそれらを呼び出そうとしましたが、そこでは機能しません。
c - Objective-C の int のグローバル配列が期待どおりに機能しない
私の MyConstants.h ファイルに...私は持っています:
一致する MyConstants.m ファイルには...次のものがあります。
他の *.m ファイルのそれぞれに...
私の viewDidLoad{} メソッドの 1 つの中に、次のものがあります。
「abc = (22) (3)」ではなく「abc = (0) (3)」と表示されるのはなぜですか?
これを期待どおりに機能させるにはどうすればよいですか?
cocoa-touch - extern を使用せずに、別のクラスで宣言された変数にアクセスするにはどうすればよいでしょうか?
externを使わずに、classAで宣言されているclassBの整数型変数にアクセスできますか?
ClassA *obj1 = [[ClassA alloc]init]; を使用したオブジェクトについては、そして、classA のオブジェクトをクラス B にアクセスしました。
しかし、私は int 、 float 、 NSTimeInterval でそれらを行うことができません。extern を使用せずにどうすればよいのでしょうか?
ありがとうございました。
c++ - extern キーワードは本当に必要ですか?
aaa
で定義されておりtest1.h
、 extern キーワードを使用していませんが、参照できますaaa
。
だから私はextern
本当に必要だと思いますか?
c - なぜ静的変数への外部リンクを行わないのですか?
extern int n
nが(別のファイルで)宣言されているとコンパイルされないのに、宣言されているとstatic int n
動作するのはなぜint n
ですか?(これらの宣言は両方ともファイルスコープにありました。)
基本的に、int n
ファイルスコープ内static int n
が同じスコープ内と同じではないのはなぜですか?それはexternに関連しているだけですか?もしそうなら、externはどうですか?
c++ - 外部変数の問題
2 つの cpp ファイルと 1 つのヘッダー ファイルがあり、両方の cpp ファイルに含まれています。こんな感じです:
abc.h
a.cpp
b.cpp
a.cpp をコンパイルすると、エラーは発生しなくなりました。しかし、b.cpp をコンパイルすると、「'key' への未定義の参照」というエラーが表示されます。このコードの問題を見つけるのを手伝ってください。
c++ - pro*C ファイルでの C 関数の呼び出し
pro*C プログラムにこれらの行があります。関数 initAverage(int i) は C 言語で定義されており、.pcc (Pro C++) ファイルでこの関数を呼び出そうとしています。
エラーが発生します
c++ - C++ 'new' キーワードと C
重複の可能性:
C++ でキーワード class を変数名として使用する
私が使用しているライブラリの C ヘッダー ファイルでは、変数の 1 つに「new」という名前が付けられています。残念ながら、私はこのライブラリを C++ プロジェクトで使用しており、変数名として 'new' が出現すると、コンパイラが異常終了します。私はすでに extern "C" { #include<...> } を使用していますが、この点では役に立たないようです。
「new」は C キーワードではないため、C 開発者としての観点からは、コードはまったく問題ありませんが、ライブラリ開発者にその変数の名前を変更するよう依頼する必要がありますか?
c - Cで静的関数と変数を使用する理由
static
Cで、ファイル内の変数のスコープ制限としてキーワードを使用することについて疑問に思います。
私が見ているように、Cプログラムを構築する標準的な方法は次のとおりです。
- 関数と変数を定義するcファイルの束があり、スコープが。で制限されている可能性があります
static
。 - 他のcファイルが使用できるように、対応するcファイルの関数と場合によっては変数を宣言するhファイルの束があります。プライベート関数と変数はhファイルで公開されません。
- すべてのcファイルは個別にoファイルにコンパイルされます。
- すべてのoファイルはアプリケーションファイルにリンクされています。
static
とにかく変数がhファイルで公開されていない場合、gobalをとして宣言する2つの理由がわかります。
- 1つは読みやすさのためです。変数が他のファイルでアクセスされていないことを、私を含む将来の読者に知らせてください。
- 2つ目は、別のcファイルが変数を。として再宣言しないようにすることです
extern
。リンカは変数がとの両方extern
であることを嫌うと思いますstatic
。(ファイルが他の誰かが所有する変数を再宣言するという考えは嫌いですがextern
、それは大丈夫ですか?)
他の理由はありますか?
関数についても同じことが言えstatic
ます。プロトタイプがhファイルで公開されていない場合、他のファイルはとにかく関数を使用しない可能性があります。それでは、なぜそれを定義するstatic
のでしょうか。同じ2つの理由がわかりますが、それ以上はわかりません。
c++ - C++ で C# の「読み取り専用」動作を実現する
これはスタック オーバーフローに関する私の最初の質問なので、優しくしてください。
最初に、私が見たい正確な動作を説明しましょう。C# に精通している場合は、変数を「読み取り専用」として宣言すると、プログラマーがその変数に値を 1 回だけ割り当てることができることをご存知でしょう。変数をさらに変更しようとすると、エラーが発生します。
私が求めていること: 私が定義するすべてのシングルトン クラスを、プログラム内で 1 回だけ予測どおりにインスタンス化できるようにしたいと考えています (詳細は下部にあります)。
私の目標を実現するための私のアプローチは、 extern を使用してシングルトンへのグローバル参照を宣言することです (これは後で選択した時点でインスタンス化します。私が持っているものは、次のようになります。
ただし、これは実際には機能せず、ここからどこに行くべきかわかりません。
私が反対していることについての詳細:
いくつかのサードパーティ プロセスや作成する他のプロセスと通信しながら、ゲーム ロジックを処理するコードに取り組んでいるため、スレッド化について懸念しています。最終的には、何らかの同期を実装して、複数のスレッドが安心して Singleton クラスの情報にアクセスできるようにする必要があります。どのような種類の最適化を行いたいのか、またはスレッド化が正確に何を伴うのかわからないため (それを使用して実際のプロジェクトを実行したことはありません)、シングルトンがインスタンス化されるタイミングを予測可能に制御できることは良いことだと考えていました。
プロセス A がプロセス B を作成し、B には複数のファイルやライブラリに対して分散された複数のシングルトンが含まれているとします。これらのシングルトン オブジェクトがインスタンス化される順序を確実に保証できない場合、それは本当の悪夢になる可能性があります (それらは相互に依存する可能性があり、NULL オブジェクトでメソッドを呼び出すことは一般的に悪いことです)。
C# を使用している場合は readonly キーワードを使用するだけですが、この (コンパイラがサポートする) 動作を C++ で実装する方法はありますか? これも良い考えですか?フィードバックをお寄せいただきありがとうございます。
編集
上記のコード例に従うことに縛られていた場合、選択した回答は、必要なことを行う最も簡単な方法です。私はこれらの EntryPoint オブジェクトの 1 つだけを作成する予定ですが、シングルトンから離れたパターンに変更することにしました。
これらすべてのシングルトンが必要になると考えていた理由の 1 つは、モジュラー プラグイン タイプのアプリケーションをサポートするより大きなアーキテクチャを作成する計画があるためです。また、メモリ リークを最小限に抑えるために、より多くのエラー チェックとメモリ保護が必要でした。クロスプラットフォームの Qt ( http://qt.nokia.com/ ) が保護されたポインターやその他のクールな機能を提供していることを知り、うれしく思いました。