私はstatic inline
を使用しますが、static
も同様に動作します。ヘッダが複数の翻訳単位に含まれている場合は、複数の外部定義を取得したいので、
extern
とextern inline
が出ているので、あなたはstatic
、static inline
とinline
仕様を検討する必要があります。
Hepticは、inline
が指定されているかどうかにかかわらず、ほとんどのコンパイラがインライン化の機能を考慮していることを正しく示しています。つまり、inline
の主な影響はリンケージへの影響です。
しかし、static
の定義には内部リンケージがあるため、static
とstatic inline
の間に大きな違いはありません。ヘッダーファイルの関数定義については、static inline
を好んで使用しています(経験則:ヘッダーファイルはextern
宣言、static const
変数定義、static inline
関数定義のみを含む必要があります)。 インライン定義、標準状態(C99 6.7.4、§6)
でstatic
せず
inline
またはextern
結果は、翻訳者が使用することができる外部の定義に代わるものを提供します 同じ翻訳単位で関数への呼び出しを実装します。 関数への呼び出しがインライン定義または外部定義を使用するかどうかは不明です。
つまり、インライン定義には常に外部定義が付いている必要があります。これはあなたが探しているものではありません。
C99インラインセマンティクスの微妙な情報については、this answer、Clang homepageおよびC99 Rationale (PDF)に記載されています。
-std=c99
または-std=gnu99
が存在する場合、GCCはC99セマンティクスのみを使用することに注意してください。
それは**それらを定義しない、ヘッダーで**それらを実装するために悪いです; Cのヘッダファイルのアイデアを) – m0skit0
/C++開発者のための追加作業を作成し、私は誰もが、コードサイズが小さく宣言 – linquize
を複製したいと考えていません理解しますそれともそれが小さいか:D? – UmNyobe