헤더파일 라이브러리 api 개념이 햇갈립니다ㅜ

count5084의 이미지

프로그래밍을 하면서 개념이 햇갈려서 질문 올려봅니다.

헤더파일은 함수원형선언, 전역변수선언 or 매크로 정의 등 각종 전처리기를 서술해놓은 파일
라이브러리는 링크과정에서 소스코드랑 합쳐지는 이미 컴파일된 바이너리파일
api는 어떤 소프트웨어에서 그 소프트웨어의 기능을 사용할 수 있도록 지원하는 함수의 집합? 라이브러리?

1. 라이브러리는 제가 따로 설정을 안해도 자동으로 추가되는건가요? (아님 표준 라이브러리만?)

제가 개념이 너무 미흡하다고 느낀게 숏코딩에 관한 글을 보게되었는데
#include
int main....
이런식으로 쓰고
stdio.h 는 라이브러리와 합쳐지는 링커과정에서 포함시킨다며,
#include 를 제거해도 된다고 설명하더군요
#include 를 제거해도 경고만 내보낸 후 컴파일이 된다는건 알고 있었지만
(지금 visual studio 로 해보니 안되네요?ㄷ 최적화 옵션때문인가..)
그 이유가 c99에서 표준 헤더파일은 포함을 시키지 않아도 함수가 사용되면 자동으로 추가시켜준다는
조금 말도 안되는 식으로 외웠습니다.

2. 저 설명을 제가 제대로 기억하는지 모르겠지만,
printf함수는 stdio.h에 선언되어있고 정의되어있는데,
링크과정에서 추가되는 라이브러리랑 stdio.h가 관련이 있나요?

3. 라이브러리를 직접 다뤄보질 않았으니 개념도 익숙하지 않고
(라이브러리 제작이라는 강좌를 보기는 했지만 얕은 지식으로 보니,
저러면 헤더파일이랑 다를게 뭐지? 이런생각만 들더군요..)
솔직히 프로그래밍 하는데 무슨 필요가 있는지 잘 모르겠습니다.
#include
int main() { printf("test"); return 0; }
이런 프로그램에서 라이브러리는 어떤 필요성(역활)이 있나요?
질문이 좀 이상하지만 헤더파일은 printf함수를 사용하기 위해 있는거고
라이브러리는 어떤 필요성때문에 있는지 궁굼합니다.
저기서 링크과정에서 포함되는 라이브러리가 없을 시 어떤 문제가 생기나요?

4. api는 어떤식으로 제공되는건가요?
일단 windows api를 배워본적이 있으니 windows에서 제공하는 함수라고는 알고있는데,
내가 만든 프로그램에서 c프로그래밍에 api를 제공하려면 (이 표현이 맞는진 모르겠지만)
어떤식으로 프로그래밍을 해야하나요?

그리고 windows에서 윈도우 창을 띄우려면 windows api를 꼭 사용해야 한다고 알고있는데,
(windows에서 윈도우를 띄우는 함수를 제공하기 때문?)
java 에선 windows api 를 사용하지 않고 윈도우를 띄울 수 있더군요
(windows api를 사용하긴 하는지..)
다른 언어도 마찬가지고요,
windows api는 윈도우를 띄우는 하나의 방법일 뿐인가요?
다른 방식은 windows에서 함수를 제공하지 않는데 어떤식으로 윈도우를 띄우는건가요?

쌓이고 쌓인 미흡한점을 물어보려하니 질문이 많고 난해한점이 있는거같네요
읽어주셔서 감사합니다

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.