ヘッダーのみの C「ライブラリ」を見ています: https://github.com/zserge/jsmn/blob/master/jsmn.h
私が理解できる限り、このコードは .c ファイルに含まれるすべてのオブジェクト ファイルにコンパイルされjsmn.h
、スペースが無駄になります。
(ファイルの関数定義は 内#ifndef JSMN_HEADER
にあるため、JSMN_HEADER を定義することで、これを「従来の」ヘッダー ファイルとして使用できます。)
- 「トラディショナル」
.c
と.h
ペアで書かれていないのはなぜですか? - リンカは、オブジェクト ファイル間で関数の同一定義を重複排除するのに十分賢いですか? 「重複シンボル」エラーが発生すると予想していました。
- コードをヘッダーに配置すると、C でどのような利点が得られますか? (C++ ではありません。)
#define JSMN_HEADER
インポートする前に使用する場合、関数定義はどこから取得しますか?- ヘッダーのみであることは
jsmn.h
巧妙なトリックであり、そこから学ぶことができますか?