0Pricing
Lua Academy · 강의

Lua에 C 함수 등록하기

luaL_register와 lua_pushcfunction으로 C 함수를 Lua 스크립트에 노출합니다.

Lua에 C 함수 등록하기은(는) CoddyKit의 무료 Lua Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Lua Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

개요

C 함수는 Lua 스크립트에 노출할 수 있습니다. C 함수는 int myFunc(lua_State *L) 시그니처를 가져야 합니다. 스택에서 인수를 읽고 반환 값을 넣습니다.

C 함수 시그니처

Lua에서 호출할 수 있는 모든 함수는 lua_CFunction입니다. lua_State*를 받고, 인수를 읽고, 결과를 넣은 뒤 결과 개수를 반환합니다.

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

전역 함수로 등록하기

lua_pushcfunction(L, l_add)로 C 함수를 넣은 다음 lua_setglobal(L, "add")로 Lua의 전역 함수로 등록합니다.

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

luaL_newlib / luaL_register

luaL_Reg 배열과 luaL_newlib를 사용하여 여러 C 함수를 Lua 모듈로 등록하십시오.

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

인수 읽기

luaL_checknumber(L, n), luaL_checkstring(L, n) 등은 인수를 읽고 검증하며, 자료형이 잘못되면 Lua 오류를 발생시킵니다.

여러 값 반환하기

여러 값을 넣고 그 개수를 반환하십시오. Lua는 이를 여러 반환 값으로 할당합니다.

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

C 클로저의 상위 값

C 클로저는 lua_pushcclosure(L, fn, n)을 사용하여 등록 시점에 상위 값을 캡처합니다. lua_upvalueindex(n)으로 상위 값에 접근하십시오.

C에서 오류 보고하기

C 함수에서 Lua 오류를 발생시키려면 luaL_error(L, format, ...)을 호출하십시오. 이 함수는 반환하지 않고 보호된 호출 처리기로 longjmp합니다.

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

C 모듈을 .so/.dll로 만들기

C 모듈은 luaopen_modname 함수를 노출합니다. Lua의 require가 공유 라이브러리를 불러온 뒤 이 함수를 호출하여 모듈을 초기화합니다.

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

인수 개수 확인

lua_gettop(L)으로 전달된 인수 개수를 확인하십시오. luaL_checkany(L, n)은 최소 n개의 인수가 제공되었는지 확인합니다.

LuaJIT FFI 대안

LuaJIT의 FFI를 사용하면 C 래퍼 코드를 작성하지 않고 Lua에서 직접 C 함수를 호출할 수 있습니다. 순수 함수 호출에는 이 방법이 더 간단한 경우가 많습니다. 더 깊은 통합에는 C API가 필요합니다.

C 함수 질문

Lua에서 호출할 수 있는 C 함수는 무엇을 반환해야 합니까?

복습: C 함수 등록하기

Lua에서 호출할 수 있는 C 함수의 시그니처는 int f(lua_State*)입니다. luaL_check*로 인수를 읽고, 결과를 넣은 다음 개수를 반환하십시오. lua_pushcfunction으로 개별 등록하거나 luaL_newlib으로 한꺼번에 등록할 수 있습니다.

자주 묻는 질문

“Lua에 C 함수 등록하기” 강의는 무료인가요?

네 — “Lua에 C 함수 등록하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Lua Academy 강의 전체를 잠금 해제할 수 있습니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“Lua에 C 함수 등록하기”에서 뭘 배우나요?

luaL_register와 lua_pushcfunction으로 C 함수를 Lua 스크립트에 노출합니다. 브라우저에서 직접 실행하는 실습 코드로 Lua Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Lua Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Lua Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“Lua에 C 함수 등록하기” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Lua Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Lua Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Lua C API 스택 모델
  2. C에서 Lua 함수 호출하기
  3. Lua에 C 함수 등록하기
  4. 상태 관리와 오류 처리
← Lua Academy(으)로 돌아가기