이식성 있는 프로그램을 만들려면

gurumong의 이미지

안녕하세요!
저는 프로그래밍 초보입니다

책에 있는 간단한 문제를 푸는 정도의 수준을 떠나서
남에게 만들었다고 자랑정도!? 할수있는 완성도 높은 프로그램을 한번 만들어 보고자 하는데요
일단은 간단한 테트리스를 만들어 보기로 했습니다
그런데 책에 있는 문제 수준의 길어봐야 20 라인을 채 넘기기 힘든 그런것들을 풀다가
갑자기 완전한 프로그램 하나를 만들어 보려고 하니 몇가지 문제가 생겼는데요

평소 책에서 보고 약간 알고있던 "이식성 있는 프로그램"을 만들기 위해
표준 C문법을 잘 따라서 코딩하고 표준 C 라이브러리가 지원해주지 않는 기능들은 래핑 함수로 만들어서 최대한 분리 시켜
제가 만든 소스가 리눅스나 윈도우즈 시스템에서 수정없이 컴파일이 되도록 할껀데

그러기 위해선 전처리기의 조건부 번역을 이용해서
현재 OS와 컴파일러에 따라 각기 다른 헤더 파일을 인쿨루드 해야하고 다른 함수를 사용해야 하는데
표준 C에서는 OS와 컴파일러 정보에 대한 기정의 매크로를 정의하지 않고있고
하나의 컴파일러의 표준에서 확장된 기정의 매크로를 이용해서 얻어낸다면 그건 이식성을 떨어뜨리게 되는데

이 문제를 어떻게 해결할수 있을까요?

예진아씨의 이미지

간단히 해 보려면 직접 해당 툴의 명령어를 일일이 다 배우지 않고도
KDevelop 에서 C++ 프로젝트 만들면 됩니다.

임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

ssehoony의 이미지

수많은 컴파일러의 pre-defined 값을 이용해 각각을 처리해 줘야 합니다.
ifdef와 ifndef로 인해 굉장히 복잡하고 지저분한 코드가 작성이 되는 것은 아직까지의 코딩 이론으로는 어쩔 수 없는 듯합니다.
그래서 일반적인 경우에는 가급적 플랫폼에 의존적인지 않는 함수로만 구현을 하며, 만약 OS이 의존적인 기능을 사용해야 한다면 직접 그런 코드를 작성하지 않고, 모든 플랫폼에서 사용가능하도록 이미 구현된 라이브러리를 사용해서 구현합니다. 가령 ACE library 라던지 FOX GUI Toolkit (An open source cross-platform C++ based Toolkit for GUI development.) 와 같은 것을 이용하는 것이지요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.