Chamando funções Lua a partir de C
Carregue e execute scripts e funções Lua a partir de código C.
Chamando funções Lua a partir de C é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.
Visão geral
Para chamar uma função Lua a partir de C: coloque a função na pilha, coloque os argumentos, chame lua_pcall e depois leia os resultados da pilha.
Carregando um script Lua
luaL_dofile(L, filename) carrega e executa um arquivo Lua. Ou use luaL_loadfile + lua_pcall para separar o carregamento da chamada.
// C code
if (luaL_dofile(L, "config.lua") != LUA_OK) {
fprintf(stderr, "Error: %s\n", lua_tostring(L, -1));
lua_pop(L, 1);
}Obtendo uma função global
Use lua_getglobal(L, "funcName") para colocar uma função global Lua na pilha.
// C code
lua_getglobal(L, "myFunction"); // push function
lua_pushnumber(L, 10); // push arg1
lua_pushnumber(L, 20); // push arg2lua_pcall
lua_pcall(L, nargs, nresults, errfunc) chama a função na pilha. Em caso de sucesso, retorna LUA_OK e deixa os resultados na pilha.
// C code
if (lua_pcall(L, 2, 1, 0) != LUA_OK) {
fprintf(stderr, "Call error: %s\n", lua_tostring(L, -1));
lua_pop(L, 1);
} else {
double result = lua_tonumber(L, -1);
lua_pop(L, 1);
printf("Result: %f\n", result);
}Vários valores retornados
Especifique nresults em lua_pcall para ler vários valores retornados. Eles são colocados na pilha na ordem.
// C: calling a Lua fn that returns two values
lua_getglobal(L, "minmax");
lua_pushnumber(L, 5); lua_pushnumber(L, 3);
lua_pcall(L, 2, 2, 0);
double mn = lua_tonumber(L, -2);
double mx = lua_tonumber(L, -1);
lua_pop(L, 2);LUA_MULTRET
Passe LUA_MULTRET como nresults para aceitar todos os valores retornados pela função. Verifique lua_gettop(L) depois para saber quantos foram retornados.
Manipulador de erros
Passe um errfunc diferente de zero para lua_pcall a fim de usar um manipulador de erros personalizado. O manipulador recebe o objeto de erro e pode adicionar informações de rastreamento da pilha.
// C: setup traceback handler
lua_getglobal(L, "debug");
lua_getfield(L, -1, "traceback");
lua_remove(L, -2); // remove debug table
int errhandler = lua_gettop(L);
// push fn and args, then:
lua_pcall(L, nargs, nresults, errhandler);Chamando métodos em objetos
Para chamar um método de objeto Lua: coloque o método na pilha, coloque o objeto (self), coloque os demais argumentos e depois faça a chamada.
Passando tabelas como argumentos
Crie uma tabela na pilha com lua_newtable, preencha os campos com lua_setfield e depois inclua-a como argumento da função.
Registro de referências
Use luaL_ref(L, LUA_REGISTRYINDEX) para armazenar um valor Lua no registro e obter uma chave inteira para recuperá-lo depois.
// C: store a callback for later use
lua_pushvalue(L, callbackIdx);
int ref = luaL_ref(L, LUA_REGISTRYINDEX);
// Later: lua_rawgeti(L, LUA_REGISTRYINDEX, ref);Limpeza
Sempre remova os valores não utilizados da pilha. Pilhas desequilibradas se acumulam ao longo de muitas chamadas e acabam transbordando. Verifique o tamanho da pilha em compilações de depuração.
Pergunta sobre lua_pcall
O que lua_pcall(L, 2, 1, 0) faz?
Recapitulação: chamando Lua a partir de C
Coloque a função e os argumentos na pilha, chame lua_pcall, verifique o código retornado e depois leia os resultados da pilha. Use luaL_ref para armazenar callbacks Lua para uso posterior. Sempre remova os valores não utilizados da pilha.
Perguntas Frequentes
A aula “Chamando funções Lua a partir de C” é grátis?
Sim — o texto completo de “Chamando funções Lua a partir de C” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.
O que vou aprender em “Chamando funções Lua a partir de C”?
Carregue e execute scripts e funções Lua a partir de código C. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Lua Academy?
Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Chamando funções Lua a partir de C”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Lua Academy?
Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Modelo de pilha da API C do Lua
- Chamando funções Lua a partir de C
- Registrando funções C no Lua
- Gerenciamento de estado e tratamento de erros