C언어의 inline 키워드

C언어로 함수 좀 짜다보면 inline이라는 키워드를 써서 만들어 보여주면 “이건 뭐임?”이라면서 신기하게 쳐다보는 사람이 있어서 혹시나 해서 올려봄…

#define같은 선행 처리자들은 매크로가 pre-processor에서 단순 치환되는 형태이다. 그러나, inline은 컴파일러가 함수 인수등의 type을 체크해 보고 안전하다고 판단되는 경우에 처리를 해준다.

그냥 보이는 결과적으로는 #define이나 inline이나 큰 차이는 없어보임. 그러나 그 차이는 요즘은 문제가 된다.

기본적으로, 함수를 이용하면 호출과 반환으로 인한 메모리 할당 등에 대해서 오버헤드가 발생한다. 그러나, 근래에 코드 작성하는 요령에 권장되는 사항들은 짦은 길이의 함수를 만들어서 가독성 및 오류가 적은 수준의 단위로 만들어서 구현하는 것이 추세이다.

이런 면에서, 짧은 길이의 C함수를 이용하는 것은 장점보다 비효율적인 면이 많이 생긴다. 이러한 경우에 매크로 함수를 이용하는 것이 바람직하다. 매크로 함수를 이용하면 전처리기에 의해 해당 부분이 정의된 내용으로 대체되어 함수 호출 과정이 사라지게 된다. 따라서 함수 이용으로 인한 오버헤드가 발생하지 않는다.

반면, 매크로 함수의 정의 부분이 길면 프로그램의 크기가 커지게 되는 문제점이 있다. 이 부분은 의도치 않게 커지는 부분이 된다. 게다가 매크로 함ㅁ수를 정의하는 것은 일반적인 함수를 정의하는 것보다는 구현이 까다로운 점도 있다.

그래서 일반적인 함수를 정의하는 것처럼 쉽게 구현할 수 있고 매크로 함수처럼 동작하는 기능을 가진 함수가 있는데 이걸 C에서 이용하는 inline 함수이다.

inline 키워드는 inline 함수를 만들기 위한 키워드이다.  C언어 책에도 나와있는 것이라서 솔직히 다 알고있을 줄 알았는데, C를 그냥 함수랑 포인터까지만 배우고 나서 OOP 한답시고 바로 자바로 넘어가서 더 이상 깊게 안보게 되면 잘 모르는 경우가 많은 듯 해서 적어봤다.

리눅스와 C

리눅스의 대부분이 C언어로 작성되었고, 리눅스 수많은 어플리케이션을 C로 작성한다. 실제로 C로 작성된 프로그램도 상당수 존재한다. 따라서 리눅스 프로그래밍은 C프로그래밍을 의미한다. (거의 일반화된 예기)

또한 C 프로그래밍을 위한 환경을 리눅스에서는 기본적으로 제공하고 있다. C 컴파일러인 gcc, C 디버깅 툴인 gdb, C 컴파일 자동화 툴인 make 등을 기본적으로 제공한다.

결국 리눅스 환경에서 프로그래밍을 한다면 C는 계속 이용하게 될 것이다.

요즘 많은 언어들이 있어도 C는 안쓸 수 없을 것이다.

C언어

C언어는 제디느 리치와 켄 톰슨이 벨 연구소에서 유닉스를 개발하던 중 1972년 데니스 리치에 의해 개발되었다. 그리고 유닉스도 C언어로 구현되었다. 이러한 C언어는 뛰어난 기능과 융통성을 제공함으로써 여러 곳으로 빠르게 보급되어 많은 프로그래머(특히 1학년들…)에 의해 사용되기 시작하였다. 그러나 많은 프로그래머들이 자신이 사용하기 편리하게 C언어를 수정하기 시작하여 프로그램간에 호환성이 결여되고 표준 라이브러리 함수마저도 조금씩 달라지는 문제가 발생하였다. 이런 문제점을 해결하기 위해 ANSI에서는 1983년에 C 표준화를 위한 위원회를 결정했고, 1989년 ANSI 표준 C라고 알려진 표준안을 발표했다.

이러한 C언어는 유닉스, 리눅스와 같은 대부분의 시스템 소프트웨어를 구현하는 언어로, 고급 언어이면서 저급 언어처럼 비트나 바이트 처리, 그리고 포인터에 의한 주소 처리를 한다. 그리고 PC에서부터 대형 컴퓨터에 이르기까지 모두 사용할 수 있는 이식성이 뛰어난 언어다. 또한 구조화되어 있어 같은 기능을 구현하는 다른 언어보다 프로그램 코드 길이가 짧다는 장점이 있다. 이러한 장점 때문에 C언어의 명성은 앞으로도 계속 갈 것이다.