0Pricing
Lua Academy · Leçon

Enregistrer des fonctions C dans Lua

Exposez des fonctions C aux scripts Lua avec luaL_register et lua_pushcfunction.

Enregistrer des fonctions C dans Lua est une leçon Lua Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Lua Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Lua Academy comprend 4 leçons au total.

Présentation

Les fonctions C peuvent être exposées aux scripts Lua. Elles doivent avoir la signature int myFunc(lua_State *L). Elles lisent les arguments sur la pile et y empilent les valeurs de retour.

Signature d’une fonction C

Toute fonction appelable depuis Lua est une lua_CFunction : elle reçoit un lua_State*, lit les arguments, empile les résultats et renvoie le nombre de résultats.

// 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
}

Enregistrer une fonction globale

lua_pushcfunction(L, l_add) empile la fonction C, puis lua_setglobal(L, "add") l’enregistre comme fonction globale dans Lua.

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

luaL_newlib / luaL_register

Enregistrez un ensemble de fonctions C comme module Lua à l’aide d’un tableau luaL_Reg et de 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)

Lire les arguments

luaL_checknumber(L, n), luaL_checkstring(L, n), etc. lisent et valident les arguments, en déclenchant une erreur Lua si le type est incorrect.

Renvoyer plusieurs valeurs

Empilez plusieurs valeurs et renvoyez leur nombre. Lua les affectera comme plusieurs valeurs de retour.

// 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
}

Valeurs capturées pour les fermetures C

Les fermetures C capturent les valeurs capturées lors de leur enregistrement avec lua_pushcclosure(L, fn, n). Accédez-y avec lua_upvalueindex(n).

Signaler une erreur depuis C

Appelez luaL_error(L, format, ...) pour déclencher une erreur Lua depuis une fonction C. Cette fonction ne renvoie jamais la main : elle effectue un longjmp vers le gestionnaire de l’appel protégé.

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

Module C en .so/.dll

Un module C expose une fonction luaopen_modname. Le require de Lua charge la bibliothèque partagée et l’appelle pour initialiser le module.

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

Vérifier le nombre d’arguments

Utilisez lua_gettop(L) pour vérifier le nombre d’arguments transmis. luaL_checkany(L, n) garantit qu’au moins n arguments ont été fournis.

Alternative FFI de LuaJIT

La FFI de LuaJIT permet d’appeler directement des fonctions C depuis Lua sans écrire de code d’encapsulation en C. Elle est souvent plus simple pour les appels de fonctions isolés. L’API C est nécessaire pour une intégration plus poussée.

Question sur les fonctions C

Que doit renvoyer une fonction C appelable depuis Lua ?

Récapitulatif : enregistrer des fonctions C

Les fonctions C appelables depuis Lua ont la signature int f(lua_State*). Lisez les arguments avec luaL_check*, empilez les résultats et renvoyez leur nombre. Enregistrez-les individuellement avec lua_pushcfunction ou en bloc avec luaL_newlib.

Questions Fréquemment Posées

La leçon « Enregistrer des fonctions C dans Lua » est-elle gratuite ?

Oui — le texte complet de « Enregistrer des fonctions C dans Lua » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Lua Academy, passe à CoddyKit PRO. Le cours Lua Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Enregistrer des fonctions C dans Lua » ?

Exposez des fonctions C aux scripts Lua avec luaL_register et lua_pushcfunction. Tu pratiques Lua Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Lua Academy ?

Aucune expérience préalable n'est requise. Lua Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Enregistrer des fonctions C dans Lua » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Lua Academy ?

Oui. Chaque leçon Lua Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Modèle de pile de l’API C de Lua
  2. Appeler des fonctions Lua depuis C
  3. Enregistrer des fonctions C dans Lua
  4. Gérer l’état et les erreurs
← Retour à Lua Academy