web-dev-qa-db-ja.com

Objective-Cの静的、extern、インライン

LLVMコンパイラを使用したObjetive-Cでのstaticexternおよびinline(およびそれらの組み合わせ)の意味は何ですか?

また、CG_EXTERNおよびCG_INLINEマクロ。代わりにそれらを使用する必要がありますか?

(私は明確な説明のあるソースを見つけることができなかったので、ここで作成するか、誰かがそれを知っている場合はそれを指すと便利だと思いました)

29
hpique

LLVMコンパイラを使用したObjetive-Cでは、静的、外部、インライン(およびそれらの組み合わせ)は何を意味しますか?

Cと同じですが、ObjC++としてコンパイルしない限り、C++と同じ意味になります。

ここにCの紹介がありますが、詳細が重要であるため、これらを使用する準備ができている場合はリンクをお読みください。


Extern

概要:識別子が別の場所で定義されていることを示します。

詳細: http://tigcc.ticalc.org/doc/keywords.html#extern

静的

概要(値):スコープが終了した後も存続する変数値を保持します。

概要(関数):名前のないコピーを効果的に発行します-Cのプライベート関数に役立ち、インライン関数で使用すると複数の定義エラーをエスケープするために使用できます。

詳細: http://tigcc.ticalc.org/doc/keywords.html#static

インライン

概要:関数の本体を呼び出し元に移動する必要があることを示唆しています。

詳細: http://tigcc.ticalc.org/doc/gnuexts.html#SEC9


C++では、インラインと静的はかなり複雑です(C++のほとんどすべてと同様)。

また、CG_EXTERNおよびCG_INLINEマクロがあることもわかりました。代わりにそれらを使用する必要がありますか?

番号。

代わりに、このタイプの機能が必要な場合は、独自の意味で独自の名前を指定する必要があります。 CG_EXTERNおよびCG_INLINE特定の意味(変更される場合があります)があり、定義されたコンテキストで使用することを意図しています。また、少数のフレームワーク全体(すべてのCoreGraphics/ApplicationServices/CoreFoundation /など)を含める必要はありませんあなたが何かを指定したいときはCとC++で動作するようにexternです。

33
justin

ジャスティンはそれのほとんどをカバーしました、しかし私はより深く掘り下げたい人々のために他のいくつかの素晴らしいリソースを見つけました:

関数inlineを宣言することにより、その関数の完全なコードを、呼び出し元の場所に直接置き換えるようコンパイラーに指示します。これは、高度な機能であり、下位レベルのプログラミングを理解する必要があります。

インライン関数


このSO質問 は、extern変数について膨大な答えを持っています-変数は「どこか別の場所で定義されています「-ただし、「ここ」でも使用する必要があります。


Staticは、スコープ外の変数の寿命を維持します。変数は、宣言されたスコープ内で可視です。

静的変数の意味は何ですか?


5
jake_hetfield