나무모에 미러 (일반/어두운 화면)
최근 수정 시각 : 2025-01-23 03:04:38

C(프로그래밍 언어)

C 언어에서 넘어옴

파일:나무위키+유도.png  
C언어은(는) 여기로 연결됩니다.
중국어를 뜻하는 은어에 대한 내용은 중국어 문서
번 문단을
부분을
, cvMax의 화법에 대한 내용은 김대호(e스포츠) 문서
9.1번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
참고하십시오.

[[컴퓨터공학|컴퓨터 과학 & 공학
Computer Science & Engineering
]]
[ 펼치기 · 접기 ]
||<tablebgcolor=#fff,#1c1d1f><tablecolor=#373a3c,#ddd><colbgcolor=#0066DC><colcolor=white> 기반 학문 ||수학(해석학 · 이산수학 · 수리논리학 · 선형대수학 · 미적분학 · 미분방정식 · 대수학(환론 · 범주론) · 정수론) · 이론 컴퓨터 과학 · 암호학 · 전자공학 · 언어학(형태론 · 통사론 · 의미론 · 화용론 · 음운론) · 인지과학 ||
하드웨어 구성 SoC · CPU · GPU(그래픽 카드 · GPGPU) · ROM · RAM · SSD · HDD · 참조: 틀:컴퓨터 부품
기술 기계어 · 어셈블리어 · C/C++ · C# · Java · Python · 바이오스 · 절차적 프로그래밍 · 객체 지향 프로그래밍 · 해킹 · ROT13 · 일회용 비밀번호 · 사물인터넷 · 와이파이 · GPS · 임베디드 · 인공신경망 · OpenGL · EXIF · 마이크로아키텍처 · ACPI · UEFI · NERF · gRPC · 리버스 엔지니어링 · HCI · UI · UX · 대역폭 · DBMS · NoSQL · 해시(SHA · 브루트 포스 · 레인보우 테이블 · salt · 암호화폐) · RSA 암호화 · 하드웨어 가속
연구

기타
논리 회로(보수기 · 가산기 · 논리 연산 · 불 대수 · 플립플롭) · 정보이론 · 임베디드 시스템 · 운영 체제 · 데이터베이스 · 프로그래밍 언어{컴파일러(어셈블러 · JIT) · 인터프리터 · 유형 이론 · 파싱 · 링커 · 난해한 프로그래밍 언어} · 메타데이터 · 기계학습 · 빅데이터 · 폰노이만 구조 · 양자컴퓨터 · 행위자 모델 · 인코딩(유니코드 · MBCS) · 네트워크 · 컴퓨터 보안 · OCR · 슈퍼컴퓨터 · 튜링 머신 · FPGA · 딥러닝 · 컴퓨터 구조론 · 컴퓨터 비전 · 컴퓨터 그래픽스 · 인공지능 · 시간 복잡도(최적화) · 소프트웨어 개발 방법론 · 디자인 패턴 · 정보처리이론 · 재귀 이론 · 자연어 처리(기계 번역 · 음성인식) · 버전 (버전 관리 시스템 · Git · GitHub · GitLab)
C
파일:C언어 로고.svg
<colbgcolor=#fff,#1f2023><colcolor=#00599c,#659AD2> 개발 <colbgcolor=#ffffff,#1f2023>국제 표준화 기구(ISO)
버전 18(2018년 6월 업데이트)
파일:홈페이지 아이콘.svg

1. 개요2. 설명3. 주요 개념
3.1. 스택(Stack)과 힙(Heap)3.2. 코딩 스타일3.3. 문법
3.3.1. 주의사항
4. 역사5. C언어를 공부하기 좋은 책과 자료6. C언어용 개발 도구들
6.1. 관련 문서
7. 여담
7.1. C언어의 다음 언어?7.2. C언어와 '++', '#'7.3. Write in C
8. 관련 문서9. 관련 커뮤니티10. 둘러보기

[clearfix]

1. 개요

The computing world has undergone a revolution since the publication of The C Programming Language in 1978.
1978년 책 "The C Programming Language" 출판 이후 컴퓨팅 세계는 혁명을 겪어왔다.
- The C Programming Language 2nd Edition [1]
Hello, world! 출력 코드 예시 【 펼치기 · 접기 】
#!syntax cpp
#include <stdio.h>

int main(int argc, char** argv) { // int main(void) 나 int main()도 가능하다.
    printf("Hello, world!\n");
    return 0;
}

1972년에 벨 연구소(Bell Labs)의 데니스 리치[2]가 만든 범용(general-purpose) 프로그래밍 언어. 원래 명칭은 그냥 'C'지만 한국에서는 'C언어'라는 명칭으로 주로 부른다. 영미권에서도 Clang이라고 부르는 사례가 있다.

온라인 상으로 코드를 실행시켜 보고 싶다면 여기로.

2. 설명

파일:상세 내용 아이콘.svg   자세한 내용은 C(프로그래밍 언어)/상세 문서
번 문단을
부분을
참고하십시오.

3. 주요 개념

파일:상세 내용 아이콘.svg   자세한 내용은 C(프로그래밍 언어)/ 문서
번 문단을
부분을
참고하십시오.

3.1. 스택(Stack)과 힙(Heap)

현대 컴퓨터와 운영체제의 메모리 관리에서 가장 중요한 개념 중 하나는 스택과 힙이다. 스택과 힙은 메모리 저장공간의 유형이며, 어디에 자료가 저장되는가를 나타내고, 또한 해당 데이터의 생성과 소멸이 어떤 방식으로 이루어지는지를 결정한다. 스택은 힙과 비교할 때 다음과 같은 특성을 가진다. 스택은 이름 그대로 스택 자료구조와 스택 포인터를 가지고 구현되며, 더 빠르고 간단한 방식으로 할당과 해제가 이루어진다. 대신 그 순서가 후입선출법을 따르기에 자유롭지 못하고, 할당 가능한 용량도 힙에 비해 작은 편이다.

그러나 C언어에서는 이 스택과 힙의 개념을 사용하지 않고[3], 대신에 저장수명(storage duration)이라는 개념을 사용한다. 즉, C언어의 추상기계는 스택과 힙을 모르며, 이에 의지하여 동작하지 않는다.

저장수명은 크게 static, thread, automatic, allocated의 네 종류가 있다. static은 프로그램의 시작부터 끝에까지 존재하고, thread는 쓰레드별로 분리하여 존재하며, automatic은 해당 블록이 시작할 때 생성되어 끝날 때 소멸되고, allocated는 메모리 할당 함수들에 의해 생성되고 free() 함수로 해제될 때까지 존재한다.

이 네 가지의 저장 수명들을 가지는 메모리 개체들을 힙과 스택 중 어디에 저장할 것인지는 C언어가 알아서 처리한다. 일반적으로는 automatic은 스택에, static은 BSS, Data, Text영역 중 한곳에, allocated는 힙에 저장하나 꼭 그래야 하는 것은 아니다. 컴파일러는 굳이 그걸 어떤 영역에 보관해야 한다고 보장하거나 알릴 필요는 없다.

그러나 그럼에도 불구하고 C언어 코드 상의 어떤 변수가 스택, 힙, 또는 어떤 메모리 영역에 저장될 것인지에 대한 감각을 훈련하는 것은 효율적인 코드를 작성하기 위해 매우 중요하다. 일반적으로 힙에서 메모리를 할당받아 오는 것이 스택에 변수를 만드는 것보다 더 많은 동작을 필요로 하고, 캐시의 지역성까지도 이에 영향을 받을 수 있기 때문에 각각의 저장수명들을 필요와 상황에 맞게 적절히 활용할 수 있어야 한다.

3.2. 코딩 스타일

C언어는 스코프를 지정할 때 중괄호 쌍 { }을 사용한다. C언어는 whitespace(공백, 탭, 리턴 문자열)가 의미 없는 언어라서[4] 여는 중괄호를 엔터를 쳐서 다음 줄에 놓는 방법과, 이전 표현 바로 옆에 놓는 방식 두 가지 모두 가능하다.

용례는 코딩 스타일 문서 참고.

C언어계 책의 9할쯤은 전부 다 줄 수를 줄인 K&R 스타일이다. 반면 실제 코드의 스타일은 4할 정도뿐. 예제는 K&R 스타일로 쓰고서도 본문 중에 실제 작업에서는 Allman 스타일을 쓴다고 밝히는 저자도 있다. 2할은 기타 스타일. 그 중 Horstmann 스타일은, 중괄호 블록이 명료하게 보인다는 Allman의 장점과 적은 공간을 차지한다는 K&R의 장점을 합친 형태이다.[5]

참고로, Clang 컴파일러의 일부인 clang-format을 사용하면 소스 코드의 스타일을 일괄적으로 정리하고 유지할 수 있다.

C에서는 대입 연산자(=)가 값을 반환하기 때문에, 실수로 == 를 쓸 곳에 =를 하나만 찍는 오타를 범했을 경우, integer 값이 리턴되는 경우에는 역시 문제 없이 컴파일되고 직접 돌려서 해당 기능이 오작동을 하기 전까지 버그를 알아챌 수조차 없게 된다. 이 때문에 == 사용 시 lvalue에 일부러 상수항을 사용하는 프로그래머들도 있다.[6] 예를 들어, a = 42; if(a == 37) { ... } 같은 경우, 실수로 if(a = 37) 이라 쓰면 false가 아닌 true가 뜨며(a = 37이라는 expression의 값은 37이고 0이 아닌 값은 죄다 true로 간주된다.), a에 37이 대입돼버려 완전히 오작동을 하게 된다. 문제는, 컴파일이 문제 없이 돼서 버그 찾기가 더더욱 힘들어진다는 점. 상수항을 왼쪽으로 옮겨서 if(37 == a) 로 써주면, 37 = a라 썼을 때 당연히 말이 되지 않으니[7] 컴파일 시 에러가 떠서 쉽게 알아챌 수 있다...라는 유명한 팁이 있지만, 사람의 직관과 맞지 않아 어색하게 느껴지기 때문에 일부러 익숙해지지 않으면 잘 쓰이지 않는다. 요새는 컴파일러가 좋아져서 이런 위험 코드는 대체로 경고 처리해준다.[8][9]

3.3. 문법

파일:상세 내용 아이콘.svg   자세한 내용은 C(프로그래밍 언어)/문법 문서
번 문단을
부분을
참고하십시오.

3.3.1. 주의사항

아래와 같은 방식으로 코딩하거나 교육하는 사람이 있을 경우 주의할 필요가 있다.

4. 역사

파일:상세 내용 아이콘.svg   자세한 내용은 C(프로그래밍 언어)/역사 문서
번 문단을
부분을
참고하십시오.

5. C언어를 공부하기 좋은 책과 자료

파일:상세 내용 아이콘.svg   자세한 내용은 C(프로그래밍 언어)/관련 책 및 자료 문서
번 문단을
부분을
참고하십시오.
C언어를 다룬 책들에 대해서 소개해둔 문서이다. 책을 고르기 전 반드시 알아둬야 할 것은, 잘못된 정보를 전달하는 책으로 공부하면 어려운 책으로 공부할 때보다 더 시간이 걸릴 수도 있다는 것이다.

6. C언어용 개발 도구들

6.1. 관련 문서

7. 여담

C언어의 추종자들은 다음과 같이 말한다.
전산과 신입생은 CPU부터 시작해서 C언어를 활용하는 데까지 차곡차곡 기초를 닦아야 합니다. 저는 솔직히 너무나도 많은 컴퓨터 관련 교육 과정들이 자바가 가장 좋은 초보자용 언어라고 선전하는 현실에 질려 버렸습니다. 흔히 자바는 쉽고, 따분한 문자열이나 malloc과 같은 골칫덩어리를 다루는 과정에서 혼란을 겪지 않으며, 아주 큰 프로그램을 모듈로 나눠서 만들 수 있는 근사한 객체 지향 프로그래밍 기법을 배울 수 있다는 화려한 이유들이 따라 나옵니다. 하지만 여기에는 교육적인 재앙이 있습니다. 졸업생들은 하향 평준화돼 러시아 페인트공 알고리즘[16]을 여기저기에 만들어내며, 심지어 자신의 잘못을 인식조차 못할 겁니다.[17] 펄 스크립트에서 이런 사실을 결코 볼 수 없을지라도, (물론 어렵지만) 기본적으로 문자열이 무엇인지 아주 깊은 단계에서 이해하지 못하기 때문입니다. 다른 이들이 뭔가를 잘하도록 가르치길 원한다면, 기초부터 시작해야 합니다. 이는 마치 베스트 키드와 비슷합니다. 마루바닥을 쓸고 닦고 쓸고 닦고, 이렇게 3주만 하면, 자연스럽게 목표물을 향해 발이 쭉쭉 뻗어나갑니다.
조엘 온 소프트웨어, 조엘 스폴스키
C언어를 깊게 공부하면 시스템의 저수준에 대해서 이해하는데 많은 도움이 되지만, 그렇다고 해서 그것을 알아야만 잘 짜여진 프로그램을 만들 수 있는 것은 아니다. 그리고 컴퓨터의 속도가 매우 빨라지고 보편화된 현대에는 고도로 추상화되고 생산성이 높은 언어에 대한 수요가 매우 크기 때문에, 다른 언어를 먼저 공부하는 것도 나쁘지 않은 선택이다.(최근 들어 많은 대학의 컴퓨터공학과에서 1학년 프로그래밍 입문 수업은 파이썬이나 자바 같은 비교적 쉬운 언어로 진행하고, 2학년 이후의 수업부터 C언어/C++로 넘어가는 편이다. 물론 1학년부터 바로 C언어/C++를 가르치는 학교도 있다...)

다소 어렵긴 어려운지, 대학교에서 C언어를 공부하는 많은 학생들이 공부 대상과 똑같은 학점을 받는 경우가 있는 모양이다.

2024년 11월에 미국 정부는 C언어 및 C++를 사용하지 말 것을 권고했다: 영어 원문(The US government wants developers to stop using C and C++) 및 번역

7.1. C언어의 다음 언어?

B언어 기반으로 C언어가 탄생하면서 한때는 프로그래머 유머로 'C' 다음 언어가 과연 'D'일지 'P'일지[18] 묻는 이야기가 있었지만 C++ 같은 것도 나왔고, ANSI C, C99, C0x C11,[19] C18 등으로 가지를 뻗으며 진화 중인 현재의 C언어에게는 이미 과거의 이야기가 되어버렸다.[20] 사실 D라는 프로그래밍 언어도 있기는 있다. Birth와 Death 사이의 C언어 벨 연구소가 아닌 디지털 마르스(Digital Mars)에서 만든 것이기는 하지만. C++와의 문법적인 호환성은 없지만 C++의 단점을 보완하면서 고생산성을 추구하는 하이 레벨 언어들의 특성들을 반영한 네이티브 컴파일 언어라 사실상 C++의 리엔지니어링 버전처럼 취급하고 있다. ABA Games의 게임들 대부분도 D언어로 만든 것이다.

잘 모르는 사실이지만 1997년에 등장한 E라는 프로그래밍 언어도 있다. 등장한 순서만 따지면 2001년 12월에 등장해서 2007년에 정식판이 나온 D언어보다 훨씬 먼저 나온 셈. 그 외에 단일 영문자 이름을 지닌 프로그래밍 언어는 A, F, G, J, K, P, Q, R, S, T, V, Z가 있다.

7.2. C언어와 '++', '#'

C언어의 문법으로 나오는 ++는 초기화된 변수의 값을 1 증가시켜 대입하는 연산자이다. 다시 말해 C++에서 ++은 C를 1 증가시켜 대입했다는 말. C#에서 #은 ++++이다. (++이 위 아래로 두 개) 또한 C♯, 그러니깐 음악에서도 의미를 따왔다.

++와 반대로 1을 감소시키는 연산자 \-\-를 이름에 사용한 C\-\-라는 언어도 존재하는데 보다 고수준 언어의 컴파일러가 중간 언어로 생성하는 것을 목적으로 한 저수준 언어로, 주로 Haskell과 같은 함수형 언어들의 컴파일러가 이 C--를 사용한다.

7.3. Write in C

C언어와 관련해서 다음과 같은 노래도 있다. 참고로 다음 노래는 비틀즈Let It Be를 패러디한 것.


When I find my code in tons of trouble
내가 짠 프로그램에 문제가 가득하단 걸 알았을 때
friends and colleagues come to me,
친구와 동료들이 다가와
speaking words of wisdom…
슬기로운 말을 해주었네
…"write in C"
"C언어로 짜"

And as the deadline fast approaches,
마감은 빠르게 다가오는데
and bugs are all that I can see
버그밖에 보이지 않아
Somewhere someone whispers:
어디선가 누군가가 속삭였지
"Write in C"
"C언어로 짜"

Write in C, Write in C, Write in C, Write in C,
C언어로 짜, C언어로 짜, C언어로 짜, C언어로 짜
LOGO's dead and burried,
LOGO는 이미 죽어서 묻혀버렸어
Write in C
C언어로 짜

I used to write a lot of FORTRAN
예전엔 포트란으로 많이 짰었어
For science it worked flawlessly
수식 계산에선 나무랄 데 없었지만
Try using it for Grahpics!
포트란으로 그래픽을 해 보라고!
Write in C!
C언어로 짜

And if you've just spent nearly 30 hours
어셈블리 디버깅을
debugging some assembly
30시간 정도 해 봤었다면
Soon you will be glad to
금방 고마움을 느낄 거야
write in C
C언어로 짜

Write in C, Write in C, Write in C, Write in C.
C언어로 짜, C언어로 짜, C언어로 짜, C언어로 짜
BASIC's not the answer,
베이식으론 해결이 안 돼
Write in C.
C언어로 짜

Write in C, Write in C, Write in C, Write in C.
C언어로 짜, C언어로 짜, C언어로 짜, C언어로 짜
PASCAL won't quite cut it,
파스칼로는 부족한 걸
Write in C!
C언어로 짜

이 노래에 대한 또 다른 패러디로, Go 버전인 Write in Go도 존재한다.

8. 관련 문서

9. 관련 커뮤니티

10. 둘러보기

프로그래밍 사이트 선정 프로그래밍 언어 순위 목록
{{{#!wiki style="margin: 0 -10px -5px; word-break: keep-all"
{{{#!wiki style="display: inline-table; min-width: 25%; min-height: 2em;"
{{{#!folding [ IEEE Spectrum 2024 ]
{{{#!wiki style="margin: -5px 0"
<rowcolor=#fff> 스펙트럼 부문 상위 10개 프로그래밍 언어 직업 부문 상위 10개 프로그래밍 언어
1 Python 1 SQL
2 Java 2 Python
3 JavaScript 3 Java
4 C++ 4 TypeScript
5 TypeScript 5 SAS
6 SQL 6 JavaScript
7 C# 7 C#
8 Go 8 HTML
9 C 9 Shell
10 HTML 10 C++
}}}
}}}
}}}
[ Stack Overflow 2024 ]
||<tablewidth=100%><width=9999><-4><bgcolor=#FFA500><tablebgcolor=#fff,#222> 2024년 Stackoverflow 설문조사 기준 인기 상위 25개 프로그래밍 언어 ||
1 JavaScript 14 Rust
2 HTML, CSS 15 Kotlin
3 Python 16 Lua
4 SQL 17 Dart
5 TypeScript 18 어셈블리어
6 Bash 19 Ruby
7 Java 20 Swift
8 C# 21 R
9 C++ 22 Visual Basic
10 C 23 MATLAB
11 PHP 24 VBA
12 PowerShell 25 Groovy
13 Go
[ TIOBE 2024 ]
||<tablewidth=100%><width=9999><-4><bgcolor=deepskyblue><tablebgcolor=#fff,#222> 2024년 8월 기준 검색어 점유율 상위 20개 프로그래밍 언어 ||
1 Python 11 MATLAB
2 C++ 12 Delphi / Object Pascal
3 C 13 PHP
4 Java 14 Rust
5 C# 15 Ruby
6 JavaScript 16 Swift
7 SQL 17 Assembly language
8 Visual Basic 18 Kotlin
9 Go 19 R
10 Fortran 20 Scratch
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px);"
{{{#!folding [ 21위 ~ 50위 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px"
21 COBOL 36 Scala
22 Classic Visual Basic 37 Transact-SQL
23 LISP 38 PL/SQL
24 Prolog 39 ABAP
25 Perl 40 Solidity
26 (Visual) FoxPro 41 GAMS
27 SAS 42 PowerShell
28 Haskell 43 TypeScript
29 Dart 44 Logo
30 Ada 45 Wolfram
31 D 46 Awk
32 Julia 47 RPG
33 Objective-C 48 ML
34 VBScript 49 Bash
35 Lua 50 Elixir
}}}}}}}}} ||
[ PYPL 2024 ]
||<tablewidth=100%><width=9999><-4><bgcolor=green><tablebgcolor=#fff,#222> 2024년 8월 기준 검색어 점유율 상위 20개 프로그래밍 언어 ||
1 Python 11 Objective-C
2 Java 12 Go
3 JavaScript 13 Kotlin
4 C# 14 MATLAB
5 C/C++ 15 PowerShell
6 R 16 VBA
7 PHP 17 Dart
8 TypeScript 18 Ruby
9 Swift 19 Ada
10 Rust 20 Lua

}}} ||
프로그래밍 언어 목록 · 분류 · 문법

TIOBE 선정 올해의 프로그래밍 언어 / C언어
{{{#!wiki style="margin:0 -10px -5px"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin:-6px -1px -11px"
2007년
Python
2008년
C
2009년
Go
2016년
Go
2017년
C
2018년
Python
2018년
Python
2019년
C
2020년
Python
}}}}}}}}} ||




[1] 데니스 리치와 브라이언 커니핸 지음. #[2] 켄 톰슨과 브라이언 커니헨은 발전 과정에 기여했을 뿐, 공동 개발자가 아니다. 켄 톰슨은 유닉스 OS와 C언어의 전신인 B언어를 만들었고, 브라이언 커니핸은 K&R로 불리는 The C Programming Language라는 C언어의 역사에 중요한 책을 썼다.[3] C 표준에는 스택과 힙이라는 단어들이 단 한번도 나오지 않는다.[4] 정확히는 화이트 스페이스 문자들인 뉴 라인, 탭, 스페이스를 구분하지 않고 아무 whitespace 하나 이상은 공백 하나로 계산된다. 예외는 C언어/C++의 문법의 일부가 아닌 매크로로서, 무조건 뉴 라인을 이용해서 매크로의 끝을 구분지어야 하며 여러 줄에 걸쳐 작성할 경우 뉴 라인 이전에 역슬래시를 하나 추가해야 한다.[5] for(i=0;i<n;i++) { work(); } 이런 식으로 쓰는 사람들도 있기는 있다. for과 if 등은 한 함수를 실행시킬 거면, 중괄호를 안 쳐도 되긴 하다. 다만, 들여쓰기 잘못하면 피바람 분다. 함수가 한 개든 여러 개든 그냥 전부 중괄호를 치는 습관을 들이자.[6] Yoda condition이라고 불린다. 스타워즈요다가 문장에 주어의 위치를 도치하던 것에서 유래.[7] expression의 l-value에는 수정할 수 있는 값(a와 같은 변수 등)이 와야 하기 때문이다.[8] gcc 4.8 기준으로 'suggest parentheses around assignment used as truth value'(값을 진리 값으로 사용하는 assignment는 괄호를 씌우는 것을 권장함)라는 워닝 메시지가 뜬다.[9] 보통 if 문 내부에 의도된 대입 연산자의 경우에는 ((result = fn(...)) != NULL) { ... } 같은 식으로 대입 표현식을 괄호로 감싼다.[10] 다만 fgets는 입력의 처리가 gets와 조금 다르고, gets_s는 GCC와 LLVM/Clang에서는 지원하지 않으니 잘 알아보고 쓸 필요가 있다.[11] 비표준 함수로 windows에서만 사용 가능하다. C11 이후로는 표준함수로 지정이 되었으나 선택적으로 구현 가능한 함수로 지정되어 컴파일러에 따라 사용이 불가능한 경우가 있다.[12] 다만 printf의 경우 별도로 포맷 스트링 문제가 존재한다.[13] 여기서 ISO C17(2018)은 C18이다.[14] 사실은 애플이 GCC를 가져다가 사용하는 대신, 자체적으로 GCC에 추가한 기능 일부를 다시 GCC 측에 돌려주기로 약속했었다.[15] 게다가 LLVM은 이것을 처음으로 고안한 사람을 애플이 스카우트하면서 거의 애플 소유의 프로젝트가 됐다. 하지만 스티브 잡스의 애플 복귀 이후 애플이 진행하는 대부분의 소프트웨어 프로젝트가 오픈 소스인지라 이것도 역시 오픈 소스로 계속 진행중. 오라클 보고 있나? [16] 처리할 데이터의 양이 커지면 처리 시간이 지나치게 증가하는 알고리즘.[17] 이는 알고리즘의 문제이지 C언어를 모름으로써 발생하는 문제가 아니다. 굳이 C언어로 프로그래밍을 시작하지 않아도 이산수학이론 컴퓨터 과학을 제대로 배우고 익히면 충분하다는 소리다.[18] B언어의 전신이 BCPL인 데서 따온 듯 하다.[19] 과거 새로운 표준이 200x년에 나올 줄 알고 C0x로 불렸으나, 2011년에 등장하여 C11이 됐다. C++ 역시 같은 이유로 C++0x로 불리다가 2011년에 등장하여 C++11이 됐다.[20] 이들은 다른 언어가 아니라 버전이 다르다.