問題タブ [linkage]

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 投票する
3 に答える
167 参照

cakephp - CakePHPモデルリンケージのオブジェクトはどのくらい広範囲ですか?

CakePHP を理解している人が、私が抱えていた質問に光を当ててくれることを願っていました。

これが私のシナリオです。私はUserthis Userhas aCompanyを持ち、これには manyDepartmentと manyがありAddressます。を取得した場合、およびそれに関連付けられているすべてのモデルにUserアクセスできると期待できますか?CompanyCompany

それで、可能でしょう$user['Company']['Department'][0]$user['Company']['Address'][0]

元の質問に戻りますが、モデル間の関連性はどの程度ですか?

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

c++ - 継承されたクラスとのリンケージ エラー

静的ライブラリとそれを使用する別のプログラムがあります。

静的ライブラリでは、継承なしでヘッダーを定義すると、正常に機能します。

一方、QTクラスで継承を使用すると、

このスタティック ライブラリを使用するコードをコンパイルすると、リンケージ エラーが発生します。

何が問題になる可能性がありますか? ありがとう。

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

c++ - リンケージが指定されていない一部の C++ 関数が C リンケージでビルドされるのはなぜですか?

これは私をかなり当惑させるものです。

関数のセットを実装する C++ ファイルと、それらのプロトタイプを定義するヘッダー ファイルがあります。

Visual Studio または MingW-gcc でビルドすると、2 つの関数でリンク エラーが発生し、「extern "C"」修飾子を追加するとエラーが解決しました。これはどのように可能ですか?

ヘッダー ファイル、「some_header.h」:

C++ ファイル、「some_implementation.cpp」

実装は警告なしでコンパイルされますが、これらを呼び出す UI コードとリンクすると、通常の

今、私を本当に混乱させているのは、これら 2 つの関数 (HandleStart と CheckValid) だけが C リンケージで構築されているように見えることです。これら 2 つのみに「extern 'C'」宣言を明示的に追加すると、リンク エラーが解決され、アプリケーションがビルドおよび実行されます。HandleEnd などの他の関数に「extern 'C'」を追加すると、新しいリンク エラーが発生するため、明らかに正しくコンパイルされます。

実装ファイルは、プロトタイプのみで変更されることはありません。

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

c++ - c++ static はリンクしません

手伝ってくれますか?次のコード:

収量:

なんで?

0 投票する
4 に答える
7163 参照

c++ - template External Linkage ?誰でもこれを説明できますか?

テンプレート名にはリンケージ (3.5) があります。非メンバー関数テンプレートは、内部リンケージを持つことができます。他のテンプレート名には、外部リンケージが必要です。内部リンケージを持つテンプレートから生成されたエンティティは、他の翻訳単位で生成されたすべてのエンティティとは異なります。

キーワードを使った外部連携について知っている

元 :

しかし、彼らは テンプレートにCリンケージを持たないものとしました

上記のステートメントの実際の意味は何ですか?

誰でもこれを説明できますか?

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

iphone - 別のライブラリでThree20を使用し、リンケージフラグが競合している

プロジェクトにThree20を追加しようとしていますが、-ObjCフラグと-all_loadフラグが、使用している別のライブラリを混乱させています。もう1つのライブラリはバーコード読み取り用のZXingWidgetですが、その部分は関連性がないと思います。

答えは、all_loadの代わりにforce_loadを使用してから、私のthree20ライブラリを指すことだと合理的に確信していますが、それを機能させることができません。

これが私が今使っているものです:

しかし、errno=22ビルドがすぐに失敗します。

force_loadを機能させても、-ObjCフラグはそれ自体で問題を引き起こします。ライブラリごとに異なるフラグを設定するにはどうすればよいですか?実際のライブラリにビルドフラグを設定する方法がわかりません。

編集:それで、force loadを使用して各.aライブラリを追加したところ、コンパイルされますが、force_loadを実行する前に持っていたThree20からの内部呼び出しで認識されないセレクターが表示されます。不足しているライブラリはありますか、それとも間違っていますか?

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

c - C の static キーワードによる内部リンケージ

staticは C でオーバーロードされたキーワードであることはわかっています。ここでは、内部リンケージを強制するためのキーワードとしての使用にのみ関心があります。

ファイルで宣言されたグローバル変数がある場合、使用する場合と使用しない場合.cの違いは何ですか? いずれにせよ、他のファイルは変数にアクセスできないため、変数は基本的に、 static キーワードの有無にかかわらず、ファイルに対して「プライベート」です。staticstatic.c

たとえば、 filefoo.cがあり、グローバル変数を宣言するとします。

int x = 5;

その変数xは、内部のコードでのみ使用できますfoo.c(もちろん、共有ヘッダー ファイルでexternキーワードを使用して宣言しない限り)。しかし、ヘッダー ファイルで宣言しないと、次のように入力した場合の違いは何になるでしょうか。

static int x = 5.

いずれにせよ、xここには内部リンケージがあるようです。だから私はstaticこの点での目的について混乱しています。

0 投票する
3 に答える
1974 参照

c++ - さまざまな定数/静的変数のリンク

次の変数からのリンケージについていくつか質問があります。C++03の7.1.1/7の例とコンパイラー(Comeau、Clang、GCC)の実験により、次の種類のリンケージにたどり着きました。

  1. 最初staticに、次にextern

    セクション3.5によると、私には明らかです。(a)内部リンクを意味します。また、(b)は、名前「a」が静的であると宣言されているため((a)によって)、内部リンケージも意味します。

  2. 最初externに、次にstatic

    まず、(c)は外部リンケージを意味します。ただし、(d)は、名前「b」が(d)によって静的であると宣言されているため、内部リンクを意味します。暗黙のリンケージが一貫していないため、7.1.1/7によるとこれは無効です。

  3. 最初constに、次にextern

    まず、(e)は内部リンケージを意味します。これは、constであり、明示的な外部リンケージを宣言しておらず、以前は外部リンケージを暗示していなかったためです。また、(f)externリンケージを意味し、エラーになるはずです。これは、externという名前を明示的に宣言しているためですが、コンパイラーはそれを内部に保持します。なぜそうなのか? それが私の質問です。

  4. 最初externに、次にconst

    ここで、(g)は、externを明示的に宣言したため、外部リンケージを意味します。また、(h)は、(g)externを明示的に宣言しているため、外部リンケージも意味します。


次のテンプレートを使用して、3と4のリンケージを実験的に見つけました(2番目の引数は外部リンケージが必要です)


要約:チャールズベイリーとの話し合いは非常に実り多いものであることが判明し3.5/3、重要な箇条書きが

名前空間スコープ(3.3.5)を持つ名前は、

  • constとして明示的に宣言されており、externとして明示的に宣言されておらず、外部リンケージを持つように以前に宣言されていないオブジェクトまたは参照。

ポイントを見ると(f)、以下に示すように、2つの解釈は異なる結論に達します。

  1. 宣言されているが、pi1宣言されている最初の解釈ノート。したがって、変数には外部リンケージがあります。constextern

  2. 2番目の解釈は、「宣言された」の両方の出現を解釈して、同じ宣言を参照します。このように、それは宣言されているが、ではconstないextern constことを意味します。(e)は宣言されており、宣言されconstていないことに注意してください。extern constしたがって、pi1内部リンクを提供します。

さて、どのような解釈が正しいのでしょうか?その言葉遣いからは判断できませんが、コンパイラーはこれを2番目の方法で解釈しているようです。特に、最初の解釈を行う場合、名前が宣言され、以前に外部リンケージを使用して明示的に宣言3.5/3されていない有効なシナリオがないため、の最後に引用された部分は不要になります。constextern

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

c - C99で関数をインライン内部および外部コピーに定義する方法

私のライブラリには、内部と外部の両方で使用される関数が含まれています。関数が非常に小さいため、内部呼び出し時にコンパイラに関数のインライン化を試みさせたいと考えています。関数は不完全型の情報を使用するため、外部呼び出しはインライン化できません。したがって、私のモジュールには、外部リンケージを持つ関数のコピーも常に含まれている必要があります。

次の解決策を見つけたと思いますが、アドバイスをお願いします。

通常、インラインを逆に使用するか、static inline関数をヘッダー ファイルに入れるだけです。しかし、説明したように、これはここでは不可能です。

このアプローチは望ましい結果をもたらしますか? このアプローチに不利な点がある人はいますか (移植可能な C99 ですか)?

0 投票する
3 に答える
517 参照

c++ - C++ 標準ライブラリのすべての関数に外部リンケージが必要ですか?

それで、Windows、Linux、およびUNIXのいくつかのバリエーションで問題なくコンパイルできるアプリを手に入れました。最近、問題が発生したときに OSX に移植することにしました。

次のようなテンプレートがあります。

上記の入力値が与えられたときに符号拡張が特定の実装をクラッシュさせないようにするという考え0x7fです。通常、次のように使用されます。

残念ながら、これは OSX (gcc 4.2 を使用) では機能しません。このエラーは、std::isspace外部リンケージがないことに関係しているため、テンプレートには適用できません。OSX では、ctype.hヘッダーにすべての関数 (マクロを介して) がマークされていることがわかりますstatic inline

これが私の質問です:

C++ (この場合は C から継承された部分) 標準ライブラリの関数に関連する標準によって、外部リンケージを持たないことが許可されていますか?

編集:

アップルから連絡がありました。どうやら、この動作を制御するマクロを持っているようです。定義_DONT_USE_CTYPE_INLINE_すると、ctype 関数が静的インラインになるのを防ぎます。