APIのCタイプ
Duktape API は、エキゾチックなプラットフォームへの移植性を確保するために、 duk_int_t, duk_idx_t, duk_ret_t のような typedef-wrapped C 型をほぼ独占的に使用しています。ほとんどのプラットフォームでは、これらは符号付きまたは符号なしintに直接対応します。ラッパーは、通常の型の仮定(32ビットintを持つような)が保持されないプラットフォームをサポートすることを可能にします。詳細な議論はWikiのAPI C typesを参照してください。
ベストプラクティスのまとめ。
- 変数の宣言時には、移植性を高めるために、duk_idx_tやduk_ret_tのようなDuktape API型を使ってください。あるいは、(longのような)普通の型を使うこともできますが、コードの移植性は低下し、警告を避けるためにキャストを使用する必要があるかもしれません。
- printf()とduk_push_sprintf()のフォーマットでは、Duktape型をワイド整数型にキャストし、標準的なフォーマット指定子を使用します。例: printf("Result: %ld\n", (long) duk_get_int(ctx, -3));.
- 移植性を高めるため、16ビット以上の定数にはL(またはUL)接尾辞を使用します。int型と同様に、接尾辞のない整数型定数は16ビット幅しか保証されません。サフィックス L をつけると、最低でも 32 ビット幅の定数が保証されます。例: duk_push_int(ctx, 1234567L);.