Cのポインター、文字列、型
CとZigの型システムを橋渡しします
「Cのポインター、文字列、型」はCoddyKit上の無料Zig Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはZig Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Zig Academyコースには全4レッスンが含まれています。
Cの型は変換される
ZigがCをインポートすると、Cの各型がZigの型に対応付けられます。intはc_intになるため、幅がC ABIと正確に一致します。
const x: c_int = 10;C ABIの整数型
Zigにはc_int、c_uint、c_long、c_charのようなABI対応の名前が用意されており、値をCの期待どおりに配置できます。
Cポインターには[*c]を使う
生のCポインターは特殊な[*c]T型になります。nullを取り得て、Cの柔軟なポインターを反映するように緩やかに変換されます。
var p: [*c]u8 = null;[*c]が特別な理由
[*c]型は、長さが任意でnullの場合もあるCのポインターを橋渡しします。可能な場合は、Zigのスライスやポインターとの間で強制変換されます。
C文字列はバイト列
C文字列は、0で終わるバイト列へのポインターにすぎません。格納されている長さはなく、あるのはヌル終端文字だけです。
ヌル終端リテラル
センチネル形式を使うとC形式の文字列を記述できます。型[*:0]const u8は、0で終わるバイト列を表します。
const s: [*:0]const u8 = "hello";文字列をCに渡す
Zigの文字列リテラルはすでにヌル終端されているため、charポインターを受け取るCの関数にそのまま渡せます。
c.puts("done");C文字列を読み戻す
C文字列をZigのスライスに変換するにはstd.mem.spanを使います。ヌルバイトまで走査して長さを求めます。
const slice = std.mem.span(cstr);voidポインター
Cのvoid*は、Zigでは?*anyopaqueとして表されます。使用する前に、具体的なポインター型へキャストします。
@ptrCastでキャストする
Cとの境界をまたいでポインター型を橋渡しするには@ptrCastを使います。アドレスを変更せずにポインターを再解釈します。
const p: *Node = @ptrCast(@alignCast(raw));推測せず一致させる
安全な習慣は、Cの正確な型に一致させることです。intにはc_intを、文字列にはspanを使えば、意図しない問題を防げます。
クイックチェック
ZigでC文字列を使用可能なスライスに変換する方法を思い出してください。
まとめ
Cの型はc_intのようなABI対応の名前に変換され、Cのポインターには[*c]を使い、std.mem.spanでC文字列をスライスに変換できることを学びました。🎯
よくある質問
「Cのポインター、文字列、型」レッスンは無料ですか?
はい。「Cのポインター、文字列、型」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Zig Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Zig Academyコースには全4レッスンが含まれています。
「Cのポインター、文字列、型」で何を学びますか?
CとZigの型システムを橋渡しします ブラウザで直接実行するハンズオンコードでZig Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Zig Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのZig Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「Cのポインター、文字列、型」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このZig Academyレッスンでコードを書いて実行できますか?
はい。すべてのZig Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。