C의 표준 라이브러리(C11)와 glibc의 차이점이 무엇인가요?

hope0316의 이미지

이제 C기본서 한권 다 보고 레퍼런스 책을 한권 구비해 두려고 하는 초보입니다. 찾아보니까 c표준 라이브러리로 c11이 가장 최신이라고 하는데요, c11과 gnu의 glibc의 차이가 무엇인가요? C언어의 표준은 하나로 통일되어 있는 게 아닌가요? 또 c++또한 gnu계열과 C++11이 라이브러리가 다른가요? 자바 같은 언어는 api를 쉽게 찾을 수 있어서(당연히!!) 좋은데 C는 영문사이트도 있고 번역도 있지만 표준이 위촉오 삼국지처럼 서로 다른 듯 하면서 같은 듯 헷갈립니다. 애매한거 정리해주실 고수님들의 답변을 기다립니다.

익명 사용자의 이미지

glibc = C 표준 라이브러리의 실제 구현체

표준을 실제로 구현해놓은 라이브러리라고 보시면 됩니다. 몇몇 컴파일러 확장을 제외하면
당연히 표준은 "표준" 이므로 어떤 컴파일러든 거의 동일하다고 보시면 됩니다.

Visual Studio 에서 glibc 의 역할을 하는 것이 msvcrt 이고 이는 빌드 옵션에 따라
dll import 하거나 또는 static linking 될 수 있습니다.

hope0316의 이미지

답변 감사합니다.

익명 사용자의 이미지

질문이 여러개인데, 글은 하나로 올리시더라도
각 질문은 따로 따로 정리하시는게 더 명확히 답을 받으실 수 있을 겁니다.

찾아보니까 c표준 라이브러리로 c11이 가장 최신이라고 하는데요,

라이브러리하고 표준하고는 조금 다른 개념입니다.

표준은 언어 전체의 동작을 포괄적으로 정의해 놓은 것이고
라이브러리는 언어를 스펙대로 실제 구현한 컴파일러,
그중에서도 라이브러리 만을 의미합니다.

단팥빵이라는 빵의 종류가 있을때
업계 표준 단팥빵은 색과 크기와 당도가 이래야 한다 라고
단팥 표준 위원회를 만들어 업계 공통으로 정한 것이 C11이고
그걸 샤니에서 실제로 샤니 단팥빵으로 만든 것이 gcc
그중에 일부인 단팥 부분이 glibc 라고 말할 수 있겠군요.

C11이 가장 최신의 C 표준이라는 의미의 질문이라면, C11이 가장 최신 맞습니다.

c11과 gnu의 glibc의 차이가 무엇인가요?

C11은 업계 공동의 노력으로 위원회에서 정한, C언어 표준에 대한 일종의 약속이고
glibc는 gnu라는 단체에서 만든 실제 C 컴파일러 구현체 입니다.

늘 그렇지만 표준이 제깍제깍 실제 컴파일러들에 100% 다 구현되는 경우는 드뭅니다.
그러므로 glibc가 c11을 곧바로 구현한다고 보기는 힘듭니다.

C11은 아직 나온지 얼마 되지 않았으니 glibc에 적용되진 않았을 겁니다.
몇몇 부분은 확장 형태로 glibc에 이미 적용되어 있을 순 있겠군요.

 C언어의 표준은 하나로 통일되어 있는 게 아닌가요? 

하나이긴 한데 C90, C99, 그리고 최근에 발표된 C11까지 해서
각 연도별로 따로 취급하는 경향이 있습니다.
이것은 표준이 실제 컴파일러에 곧바로 적용되지 않기 때문입니다.
따라서 당분간은 C99와 C11이 공존할꺼라 보시면 됩니다.

참고로 시간이 흘러도, 각각의 컴파일러들은 각자의 사정에 따라서 표준을 100% 지원하지는 않습니다.

이제 C기본서 한권 다 보고 레퍼런스 책을 한권 구비해 두려고 하는 초보입니다. 

레퍼런스 용도로 표준 문서를 구하시는 잘못을 저지르시진 마시기 바랍니다.
사전지식 없이 곧바로 읽기엔 불친절하고, 오독의 가능성도 있는 문서입니다.
레퍼런스 용도라면 사용하고 계시는 컴파일러의 온라인/오프라인 메뉴얼을 보시는 것이 낫습니다.
(visual c++이면 MSDN, gcc면 gnu 사이트의 online document)

hope0316의 이미지

제 난잡한 질문에 이렇게 답변해주시니 너무 감사합니다. 어쩜 초보의 마음을 이리 꿰뚫어 보시는지...

댓글 달기

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