cプログラミング言語には動的型がないことは誰もが知っていますがtypeof
、GCCの演算子を使用すると、cプログラミング言語で動的型の特性を実装できますtalloc
。 。
質問:
- どのシナリオで
typeof
スキルを使用する必要がありますか? - もっと例を挙げてください。特にLinuxカーネルで使用されている手法です。(
the container_of()
marcoを除く)
このリンクhttp://gcc.gnu.org/onlinedocs/gcc/Typeof.htmlによると、考えられる使用法の1つはC++テンプレートに類似しているようです。
したがって、テンプレート化されたC関数を作成して、指定された型に基づいて配列の最小値を返すことができます。この演算子には、広範囲にわたる影響があると確信しています。
typeof
は、GCCによって拡張機能として提供されるコンパイル時の構造です。gccマニュアルの例のように、安全なマクロを作成するために使用される場合があります。
#define max(a,b) \
({ typeof (a) _a = (a); \
typeof (b) _b = (b); \
_a > _b ? _a : _b; })
Linuxカーネルについて言及しているように、container_of()
マクロはtypeof()
構成の使用の良い例です。デバイスドライバなどでサブクラス化を実装するために頻繁に使用されます。
カーネルのもう1つの例は、リストが埋め込まれているリンクリストなどのデータ構造です。
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})