Swift 타입으로 변형되는 C 타입들

Swift와 C의 데이터타입 호환

Swift는 기본적인 C 포인터 타입에 대해서는 내부적으로 자동으로 변환을 하게 된다. 예를 들어 const char * 타입의 인자를 받는 함수에는 Swift 문자열을 그대로 넣으면 된다. (이는 해당 C 라이브러리를 import 하는 과정에서 Swift가 C 함수의 인자 타입을 자동으로 변환해준다.) 그 외의 임의 포인터를 사용하는 함수라든지, C 포인터 데이터 타입을 Swift 코드에서 사용해야 하는 경우에는 각 포인터 타입을 Swift 타입으로 사용할 수 있다. 이미 이러한 예는 이전에 다룬 Swift에서 Sqlite 사용하기에서 다루고 있다. Swift 타입으로 변형되는 C 타입들 더보기

Swift에서 SQLite3를 사용하는 방법 (Objective-C + Bridging)

sqlite3를 Objective-C에서 사용하는 것은 Objective-C가 C이기도 하므로, C/C++ API를 그대로 써서 사용하면 됐다. 여기서 필요한 것은 크게 7종류의 함수이다. (각 함수에 대해서는 이전 글들이나 레퍼런스 문서를 참고하자) Swift에서 SQLite3를 사용하는 방법 (Objective-C + Bridging) 더보기

C로 간단한 TODO앱을 구현해보자.

C로 구현하는 간단한 Todo List 관리 앱

구조체 정보를 디스크에 기록하는 부분과 관련하여 두어개의 글을 쓴 적이 있는데, 오늘은 그 최종정리 편으로, C로 구현하는 간단한 TodoList 관리 앱을 만들어보도록 하겠다. 이 앱의 스펙은 다음과 같다.

  1. 각 할일은 구조체의 포인터를 사용, 객체처럼 다룰 수 있게 한다.
  2. 파일에 읽고 쓰는 것은 일련의 데이터 시퀀스를 저장하는 것이므로, 할일 목록 객체를 추가한다. 할일 목록 객체는 100개의 할일을 담을 수 있도록 한다.
    C로 간단한 TODO앱을 구현해보자. 더보기

긴 이름의 옵션을 파싱하는 C함수, getopt_long()

긴 이름 옵션 파싱함수

getopt() 함수는 비교적 사용이 쉬운데, 보통 명령행 유틸리티들은 옵션을 보다 명확하게 인지할 수 있는 긴 이름의 옵션들을 지원한다. 예를 들어 출력파일을 결정할 때 -o outfile로 쓰는 대신 --output outfile로 쓰게끔 허용하는 것이다. 이 기능은 getopt_long()이라는 함수를 통해 지원할 수 있다. 긴 이름 옵션은 하나의 문자열에 망라하기 어려우므로 별도의 구조체를 사용하여 옵션 정보를 마련해두고 이 구조체의 배열을 사용하는 방식으로 처리한다. 그러면서 인터페이스는 좀 달라지지만, 사용하는 방식은 거의 유사하다고 보면 된다.

긴 이름의 옵션을 파싱하는 C함수, getopt_long() 더보기

C/C++ : 가변 인수 매크로 함수 구현

va_args in c

예전에 가변 인수를 받는 C 함수를 만드는 법을 간단히 살펴본 적이 있는데, 오늘은 좀 더 자세히 알아보자.

C 언어에서 복수 인자를 받는 함수는 다음과 같이 선언한다.

반환형 함수명(고정인자[, 고정인자] ,....);

최소 1개 이상의 고정인자가 있고, 그 이후에 ...을 써서 추가적인 인자를 더 받는다는 것을 알려준다.

C/C++ : 가변 인수 매크로 함수 구현 더보기