0Pricing
Lua Academy · Pelajaran

Mendaftarkan Fungsi C dalam Lua

Tampilkan fungsi C ke skrip Lua menggunakan luaL_register dan lua_pushcfunction.

Mendaftarkan Fungsi C dalam Lua adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.

Gambaran Umum

Fungsi C dapat disediakan untuk skrip Lua. Fungsi tersebut harus memiliki tanda tangan int myFunc(lua_State *L). Fungsi tersebut membaca argumen dari stack dan mendorong nilai pengembalian.

Tanda Tangan Fungsi C

Setiap fungsi yang dapat dipanggil dari Lua adalah lua_CFunction: fungsi tersebut menerima lua_State*, membaca argumen, mendorong hasil, dan mengembalikan jumlah hasil.

// C code
static int l_add(lua_State *L) {
  double a = luaL_checknumber(L, 1);
  double b = luaL_checknumber(L, 2);
  lua_pushnumber(L, a + b);
  return 1;  // one result
}

Mendaftarkan sebagai Global

lua_pushcfunction(L, l_add) mendorong fungsi C, lalu lua_setglobal(L, "add") mendaftarkannya sebagai global di Lua.

// C code
lua_pushcfunction(L, l_add);
lua_setglobal(L, "add");
// Now Lua can call: add(3, 4)

luaL_newlib / luaL_register

Daftarkan sekumpulan fungsi C sebagai modul Lua menggunakan larik luaL_Reg dan luaL_newlib.

// C code
static const luaL_Reg mylib[] = {
  {"add", l_add},
  {"mul", l_mul},
  {NULL, NULL}
};
luaL_newlib(L, mylib);
lua_setglobal(L, "mylib");
// Lua: mylib.add(1, 2)

Membaca Argumen

luaL_checknumber(L, n), luaL_checkstring(L, n), dan sebagainya membaca serta memvalidasi argumen, lalu memunculkan error Lua jika jenisnya salah.

Mengembalikan Beberapa Nilai

Dorong beberapa nilai dan kembalikan jumlahnya. Lua akan menetapkannya sebagai beberapa nilai pengembalian.

// C code
static int l_divmod(lua_State *L) {
  int a = luaL_checkinteger(L, 1);
  int b = luaL_checkinteger(L, 2);
  lua_pushinteger(L, a / b);
  lua_pushinteger(L, a % b);
  return 2;  // two results
}

Upvalue untuk Closure C

Closure C menangkap upvalue saat pendaftaran menggunakan lua_pushcclosure(L, fn, n). Akses upvalue dengan lua_upvalueindex(n).

Pelaporan Error dari C

Panggil luaL_error(L, format, ...) untuk memunculkan error Lua dari fungsi C. Fungsi ini tidak pernah mengembalikan nilai — fungsi ini melakukan longjmp ke penangan pemanggilan terlindungi.

// C code
if (divisor == 0)
  luaL_error(L, "division by zero at argument %d", 2);

Modul C sebagai .so/.dll

Modul C menyediakan fungsi luaopen_modname. require milik Lua memuat pustaka bersama tersebut dan memanggilnya untuk menginisialisasi modul.

// C code (shared library entry point)
int luaopen_mymod(lua_State *L) {
  luaL_newlib(L, mymod_funcs);
  return 1;
}

Pemeriksaan Jumlah Argumen

Gunakan lua_gettop(L) untuk memeriksa jumlah argumen yang diteruskan. luaL_checkany(L, n) memastikan setidaknya n argumen telah diberikan.

Alternatif FFI LuaJIT

FFI milik LuaJIT memungkinkan Anda memanggil fungsi C secara langsung dari Lua tanpa menulis kode pembungkus C. Cara ini sering lebih sederhana untuk pemanggilan fungsi murni. API C diperlukan untuk integrasi yang lebih mendalam.

Pertanyaan tentang Fungsi C

Apa yang harus dikembalikan oleh fungsi C yang dapat dipanggil Lua?

Ringkasan: Mendaftarkan Fungsi C

Fungsi C yang dapat dipanggil dari Lua memiliki tanda tangan int f(lua_State*). Baca argumen dengan luaL_check*, dorong hasil, lalu kembalikan jumlahnya. Daftarkan satu per satu dengan lua_pushcfunction atau sekaligus dengan luaL_newlib.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mendaftarkan Fungsi C dalam Lua” gratis?

Ya — teks lengkap “Mendaftarkan Fungsi C dalam Lua” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Mendaftarkan Fungsi C dalam Lua”?

Tampilkan fungsi C ke skrip Lua menggunakan luaL_register dan lua_pushcfunction. Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Lua Academy?

Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Mendaftarkan Fungsi C dalam Lua” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?

Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Model Stack API C Lua
  2. Memanggil Fungsi Lua dari C
  3. Mendaftarkan Fungsi C dalam Lua
  4. Mengelola Keadaan dan Menangani Galat
← Kembali ke Lua Academy