C-Funktionen in Lua registrieren
Stellen Sie C-Funktionen mit luaL_register und lua_pushcfunction für Lua-Skripte bereit
C-Funktionen in Lua registrieren ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Lua Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.
Überblick
C-Funktionen können Lua-Skripten zur Verfügung gestellt werden. Sie müssen die Signatur int myFunc(lua_State *L) besitzen. Sie lesen Argumente vom Stack und legen Rückgabewerte darauf.
Signatur einer C-Funktion
Jede aus Lua aufrufbare Funktion ist eine lua_CFunction: Sie nimmt einen lua_State* entgegen, liest Argumente, legt Ergebnisse auf den Stack und gibt die Anzahl der Ergebnisse zurück.
// 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
}Als globale Funktion registrieren
lua_pushcfunction(L, l_add) legt die C-Funktion auf den Stack, anschließend registriert lua_setglobal(L, "add") sie als globale Funktion in Lua.
// C code
lua_pushcfunction(L, l_add);
lua_setglobal(L, "add");
// Now Lua can call: add(3, 4)luaL_newlib / luaL_register
Registrieren Sie eine Gruppe von C-Funktionen als Lua-Modul, indem Sie ein luaL_Reg-Array und luaL_newlib verwenden.
// 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)Argumente auslesen
luaL_checknumber(L, n), luaL_checkstring(L, n) usw. lesen Argumente aus und validieren sie. Bei einem falschen Typ wird ein Lua-Fehler ausgelöst.
Mehrere Werte zurückgeben
Legen Sie mehrere Werte auf den Stack und geben Sie deren Anzahl zurück. Lua weist sie als mehrere Rückgabewerte zu.
// 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
}Upvalues für C-Closures
C-Closures erfassen Upvalues bei der Registrierung mit lua_pushcclosure(L, fn, n). Greifen Sie mit lua_upvalueindex(n) auf Upvalues zu.
Fehler aus C melden
Rufen Sie luaL_error(L, format, ...) auf, um aus einer C-Funktion einen Lua-Fehler auszulösen. Diese Funktion kehrt nie zurück, sondern führt einen Longjmp zum Handler des geschützten Aufrufs aus.
// C code
if (divisor == 0)
luaL_error(L, "division by zero at argument %d", 2);C-Modul als .so/.dll
Ein C-Modul stellt eine Funktion luaopen_modname bereit. L uas require lädt die Shared Library und ruft die Funktion auf, um das Modul zu initialisieren.
// C code (shared library entry point)
int luaopen_mymod(lua_State *L) {
luaL_newlib(L, mymod_funcs);
return 1;
}Anzahl der Argumente prüfen
Verwenden Sie lua_gettop(L), um die Anzahl der übergebenen Argumente zu prüfen. luaL_checkany(L, n) stellt sicher, dass mindestens n Argumente übergeben wurden.
LuaJIT-FFI-Alternative
Mit der FFI von LuaJIT können Sie C-Funktionen direkt aus Lua aufrufen, ohne C-Wrapper-Code zu schreiben. Für reine Funktionsaufrufe ist das oft einfacher. Für eine tiefere Integration wird die C API benötigt.
Frage zu C-Funktionen
Was muss eine aus Lua aufrufbare C-Funktion zurückgeben?
Zusammenfassung: C-Funktionen registrieren
Aus Lua aufrufbare C-Funktionen haben die Signatur int f(lua_State*). Lesen Sie Argumente mit luaL_check*-Funktionen, legen Sie Ergebnisse auf den Stack und geben Sie deren Anzahl zurück. Registrieren Sie Funktionen einzeln mit lua_pushcfunction oder gesammelt mit luaL_newlib.
Häufig gestellte Fragen
Ist die Lektion „C-Funktionen in Lua registrieren“ kostenlos?
Ja — der vollständige Text von „C-Funktionen in Lua registrieren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Lua Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „C-Funktionen in Lua registrieren“?
Stellen Sie C-Funktionen mit luaL_register und lua_pushcfunction für Lua-Skripte bereit Du übst Lua Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Lua Academy zu starten?
Keine Vorkenntnisse erforderlich. Lua Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „C-Funktionen in Lua registrieren“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Lua Academy-Lektion Code schreiben und ausführen?
Ja. Jede Lua Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Das Stack-Modell der Lua-C-API
- Lua-Funktionen aus C aufrufen
- C-Funktionen in Lua registrieren
- Zustandsverwaltung und Fehlerbehandlung