저작권 안내
- 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
- 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.
C 언어에서 Go 언어 함수 사용하기
이재홍 http://www.pyrasis.com 2014.12.17 ~ 2015.02.07
이번에는 C 언어에서 Go 언어의 함수를 사용해보겠습니다. 다음은 Go 언어의 덧셈 함수를 사용하여 두 수를 더합니다.
package main
/*
#include <stdio.h>
extern int sum(int a, int b); // Go 언어의 함수는 extern으로 선언
static inline void CExample() {
int r = sum(1, 2); // Go 언어의 sum 함수 호출
printf("%d\n", r);
}
*/
import "C"
//export sum
func sum(a, b C.int) C.int { // C 언어에서 사용할 수 있도록 매개변수와 리턴값 자료형을
// C 언어용으로 맞춰줌
return a + b
}
func main() {
C.CExample()
}
실행 결과
3
먼저 Go 언어에서 덧셈 함수를 작성합니다.
//export sum
func sum(a, b C.int) C.int { // C 언어에서 사용할 수 있도록 매개변수와 리턴값 자료형을 C 언어용으로 맞춰줌
return a + b
}
C 언어에서 매개변수를 넣고, 리턴값을 사용할 수 있도록 매개변수와 리턴값의 타입을 각각 C.int로 지정합니다. C.int는 C 언어의 int 자료형이며 Go 언어의 int와는 다른 자료형입니다.
함수 정의 윗 부분에 //export 함수명
형식으로 주석을 작성합니다. 이 주석이 있어야 C 언어에서 Go 언어의 함수를 사용할 수 있습니다. 그리고 // 뒤에는 띄어쓰지 않고 붙여줍니다. 여기서는 sum 함수이므로 //export sum입니다.
주석 부분에서 C 언어 코드를 작성합니다.
/*
#include <stdio.h>
extern int sum(int a, int b); // Go 언어의 함수는 extern으로 선언
static inline void CExample() {
int r = sum(1, 2); // Go 언어의 sum 함수 호출
printf("%d\n", r);
}
*/
import "C"
extern int sum(int a, int b);으로 외부에 sum 함수가 있다는 것을 알려줍니다. 여기서 외부는 Go 언어입니다. 그리고 CExample 함수에서 Go 언어의 sum 함수로 두 수를 더한 다음 결과를 출력합니다.
Go 언어에서 함수를 //export로 설정한 뒤 주석 형식으로 C 언어 함수를 작성할 때는 반드시 static inline
으로 지정해줍니다. static inline
이 아닌 일반 함수로 작성하면 "multiple definition of ~" 에러가 발생합니다.
마지막으로 Go 언어에서 C.CExample을 실행합니다.
func main() {
C.CExample()
}
저작권 안내
이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.- 블로그, 게시판 등에 퍼가는 것을 금지합니다.
- 비공개 포스트에 퍼가는 것을 금지합니다.
- 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
- 링크 및 SNS 공유는 허용합니다.