고수들이 절대 가르쳐 주지 않는 C/C++ 프로그래밍 팁 #2 A/S - C/C++ Mixed Programming

Posted at 2007.06.18 08:35 // in S/W개발/고절가주팁 // by 김윤수


생각해 봤더니 저번에 두번째 팁을 쓰면서 한 가지 빠진 사항이 있어서 이렇게 A/S 글을 덧붙입니다.

제가 마지막에 정리하길...

C 라이브러리를 작성하려거든 나중에 C++ 에서 활용될 가능성을 미리 염두해 두고, 헤더 파일 처음과 마지막에 extern "C" {} 가 조건부 컴파일되게 하시라

라고 했던 것 기억하시죠 ? 근데 솔직히 세상이 우리 생각대로만 돌아간다면 얼마나 좋겠습니까 ? 다들 제가 말한 팁을 알고 있다면 처음 작성할 때부터 C++ 고려해서 프로그래밍했겠지만, 실제로는 그렇지 않은 경우가 더 많기 마련입니다.

지금 우리 수중에 C++를 고려하지 않은 괜찮은 C 라이브러리가 있는데, 이걸 C++ 에서 쓰고 싶을 경우는 어떻게 해야할까요 ? 그 C 라이브러리의 헤더 파일을 편집해서 함수 선언에다가 일일이 extern "C"를 붙여댈까요 ? 그렇게라도 해서 그 C 라이브러리를 쓰시겠다면 말리진 않겠지만, 머리가 똑바로 박힌 사람이라면 한 열개쯤 extern "C" 를 붙이다가 이걸 어떻게 쉽게 해결할 방법이 없을까 하고 고민하기 시작할 겁니다. 이른바 창조적인 귀차니즘이 시작되는 거죠. 이런 창조적인 귀차니즘은 매우 바람직한 현상이니, 개발하는 동안에는 반복적인 작업을 얼마든지 귀찮아 하시기 바랍니다.

저번 글에서 extern "C" { ... } 이런식으로 { ... } 내용 전체에 대해 extern "C"를 붙이는 방법이 있다는 걸 소개해 드렸습니다. 이걸 한 번 더 응용하시면 됩니다. 다음 C 라이브러리가 C++ 를 고려하지 않고 다음과 같이 작성되어 있다고 치겠습니다.

  1. /* max.h */
  2. int max(int a, int b);

그럼 이걸 include 하는 C++ 소스 코드에서는 다음과 같이 하시면 됩니다.

  1. /* cppmain.cpp */
  2. #include <iostream>
  3. extern "C" {
  4. #include "max.h"
  5. }
  6. using namespace std;
  7. // 나머지 내용은 동일

컴파일 해 보시면 컴파일/링크도 잘 되고 예상대로 실행도 잘되는 걸 확인하실 수 있을 겁니다. 이번글은 두 번째 팁의 A/S 글이니 여기에서 짧게 마칩니다.


이 글은 스프링노트에서 작성되었습니다.

제 글이 유익하셨다면 오른쪽 버튼을 눌러 제 블로그를 구독하세요. ->
블로그를 구독하는 방법을 잘 모르시는 분은 2. RSS 활용을 클릭하세요.
RSS에 대해 잘 모르시는 분은 1. RSS란 무엇인가를 클릭하세요.

신고
  1. 지환태

    2007.06.18 08:52 신고 [수정/삭제] [답글]

    이번 팁은 간단하면서도 유용하네요

    4번째팁도 기대하겠습니다

  2. Heart

    2007.06.18 16:56 신고 [수정/삭제] [답글]

    include가 실제로 어떻게 동작하는지를 잘 보여 주는 예인 것 같습니다. ^^

  3. 김규만

    2007.07.09 11:20 신고 [수정/삭제] [답글]

    첫번째 글을 읽으면서 이렇게 하면 안되나 하는 생각이 들었는데, 바로 AS 글에서 그 해답을 주는군요. 암튼 Brilliant YS!

  4. 최익필

    2008.06.04 12:35 신고 [수정/삭제] [답글]

    전 강의를 읽고, 그러면 헤더파일에 다 ... 수정해야 겠네;; 라는 생각을 하고 있었는데, 이거 읽고 나서! 올타꾸나 했습니다.

  5. Qrium

    2010.10.19 21:32 신고 [수정/삭제] [답글]

    이건 몰랐던건데 상당히 유용하겠네요. 감사합니다. 이전 글들도 잘 보고있습니다 ~

댓글을 남겨주세요.

티스토리 툴바