C언어은(는) 여기로 연결됩니다.
중국어를 뜻하는 은어에 대한 내용은 중국어 문서, cvMax의 화법에 대한 내용은 김대호(e스포츠) 문서
참고하십시오.[[컴퓨터공학|컴퓨터 과학 & 공학
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 | |
<colbgcolor=#fff,#1f2023><colcolor=#00599c,#659AD2> 개발 | <colbgcolor=#ffffff,#1f2023>국제 표준화 기구(ISO) |
버전 | 18(2018년 6월 업데이트) |
[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]
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. 설명
자세한 내용은 C(프로그래밍 언어)/상세 문서 참고하십시오.3. 주요 개념
자세한 내용은 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. 문법
자세한 내용은 C(프로그래밍 언어)/문법 문서 참고하십시오.3.3.1. 주의사항
아래와 같은 방식으로 코딩하거나 교육하는 사람이 있을 경우 주의할 필요가 있다.- gets 함수를 사용한다: gets 함수는 얼마나 입력받을 지 미리 정할 수 없어 버퍼에 들어온 모든 입력을 써버리는 치명적인 문제가 존재한다. 버퍼 오버플로 참조. C11부터 gets는 표준 라이브러리에서 퇴출되어 더 이상 사용할 수 없다. fgets, gets_s를 쓰도록 하자.[10] C언어 입문서에서 흔히 사용되는 scanf도 마찬가지로 문자열을 읽어들일 때 버퍼 오버플로 문제를 야기할 수 있으며 이쪽도 대안으로 VC++ 컴파일러의 scanf_s가 존재한다.[11] 같이 쓰이는 puts와 printf의 경우에는 출력 함수라 버퍼 오버플로 문제가 존재하지 않는다.[12]
- short 자료형을 특별한 이유 없이 사용한다: 32비트 아키텍처 이상 CPU는 자료형의 팩/언팩 작업 때문에 short 자료형의 퍼포먼스가 int형보다 오히려 더 낮으며 오버플로 위험만 높인다.
- 간단한 함수를 모조리 #define 매크로로 작성한다: #define은 전처리 시점에서 특정 코드를 미리 정해놓은 코드로 통째로 치환시키는 전처리문으로 실행 시 별도로 함수를 불러오는 오버 헤드가 발생하지 않는다는 이점이 있다. 이로 인해 과거 컴퓨터 성능이 좋지 못하던 시절에는 간단한 함수를 매크로로 작성하는 방법으로 프로그램의 속도 향상을 꾀할 수 있었다. 그러나 현대에는 컴퓨터 성능이 상당히 좋아졌기에 이 정도의 오버 헤드는 크게 문제되지 않는다. 또한 #define은 정해진 코드를 통째로 치환하기 때문에 예상치 못한 동작을 보일 수 있으므로 사용에 주의가 필요하다. 또한 매크로의 경우 IDE에서 Step 디버그 시 다소 애로사항이 생기기도 하므로 단순히 자주 사용되는 작은 크기의 함수를 위해서는
inline
attribute 사용이 권장된다. 특히inline
의 경우 컴파일러가 코드 상황에 따라 인라인을 결정하고 꼭 필요하다면__forceinline
(MSVC/ICC)나always_inline
(GCC/Clang)를 사용해서 무조건 인라인을 시키는 방법도 있기 때문.
4. 역사
자세한 내용은 C(프로그래밍 언어)/역사 문서 참고하십시오.5. C언어를 공부하기 좋은 책과 자료
자세한 내용은 C(프로그래밍 언어)/관련 책 및 자료 문서 참고하십시오.C언어를 다룬 책들에 대해서 소개해둔 문서이다. 책을 고르기 전 반드시 알아둬야 할 것은, 잘못된 정보를 전달하는 책으로 공부하면 어려운 책으로 공부할 때보다 더 시간이 걸릴 수도 있다는 것이다.
6. C언어용 개발 도구들
- Visual Studio 한국어 공식 사이트
마이크로소프트에서 만든 IDE. Visual Studio 2019 16.8이후 부터 C언어 표준과 C++언어 표준을 각각 지원한다. 출처[13]
- CLion 공식 사이트
IntelliJ IDEA로 유명세를 날리고 있는 JetBrains에서 개발한 C/C++ IDE이다. 인터페이스가 직관적이고 다양한 종류의 컴파일러로 크로스플랫폼 개발이 가능하다는 장점이 있다. CMake 기반으로 프로젝트를 생성하며, 유료 구독권 형식으로 판매되고 있기 때문에 월/년마다 정기 구매해야 한다. 윈도우 환경에서 WSL에 접속하여 리눅스 기반 컴파일을 할 때 가장 편리한 툴이기도 하다. 또한 유일하게 제대로 된 윈도우 환경에서의 C언어 IDE이기도 하다.
- Xcode 공식 사이트
애플에서 직접 제작한 IDE. 예전에는 GCC를 그대로 가져다[14] 썼지만, 요즘은 LLVM이라는 새 컴파일러 셋으로 이주했다.[15] C언어, C++, Objective-C, Swift 등의 언어를 컴파일할 수 있다. macOS용 애플리케이션이나 iOS용 앱을 제작하는 데는 필수이다.
- Visual Studio Code 공식 사이트
마이크로소프트의 텍스트 에디터로, C/C++ 플러그인을 설치하면 VS와 동일한 인텔리센스가 제공된다. IDE가 아니므로 컴파일러와 디버거, 빌드 툴 등을 직접 세팅해야 하지만, 그만큼 VS에 비해 가벼우므로 환경 구성법만 안다면 단순 코드 작성에는 이쪽이 나을 수 있다.
- 넷빈즈 공식 사이트
오픈 소스 IDE 중 하나로, 원래 오라클에서 배포했으나 2016년에 아파치 소프트웨어 재단으로 소유권이 이전됐다.
- Code::Blocks 공식 사이트
C/C++/Fortran용 오픈 소스 통합 개발 환경이며 라이선스는 GPL 3.0 버전을 따르고 있다.
- Bloodshed Dev-C++ 공식 사이트
GPL 라이선스를 따르는 오픈 소스 IDE. 2006년 이후로는 소식이 없다. 설치 속도가 빠르고 편리하지만 리소스 에디터가 없다. 설치할 때 기본적으로 같이 깔리는 컴파일러는 MinGW+GCC.
- Orwell Dev-C++ 공식 사이트
오웰(Orwell)이 Bloodshed Dev-C++ 4.9.9.2 소스로 개발하고 있는 IDE이다. 2015년 이후로는 무소식.
- Borland C 지원 페이지
볼랜드에서 개발한 유료 IDE. MS-DOS 시절에는 터보 파스칼과 함께 빠른 컴파일 속도로 인기가 많았으나, 윈도우의 시대가 오면서 점차 Visual Studio에 밀리게 됐다. 단순 컴파일러는 현재 무료로 다운로드 가능하다. 볼랜드가 개발 언어 쪽만 전담하는 코드기어라는 자회사를 설립하면서 모든 권한을 넘겼는데, 코드기어가 엠바카데로와 합병되면 홈페이지가 여러 차례 이동됐다. 참고로 델파이의 개발도 볼랜드 → 코드기어 → 엠바카데로의 순서로 넘어갔다.
- Turbo C++ 다운로드 페이지
볼랜드 Turbo C++를 Windows 7, 8, 10을 위해 확장한 버전. 그 외에는 소식이 없다.
- Watcom C 공식 사이트
도스 시절 끝무렵에 DOS/4GW라는 메모리 확장 프로그램과 함께 잠깐 동안 쓰였다(8.5 버전부터 포함됐다). MS-DOS의 640KB 메모리 한계를 넘어 64MB까지의 메모리를 손쉽게 사용할 수 있게 해 주었기 때문이다. 그 당시의 게이머들이라면 실행 초기에 DOS/4GW라고 뜨던 안내문을 기억할 것이다. 공식 사이트가 위키 형식으로 되어 있다. Open Watcom Public License라는 라이선스를 따른다.
- LCC 위키백과 영문
A Retargetable C Compiler: Design and Implementation라는 책에 소스 코드가 실려있는 C언어 컴파일러. 데이브 핸슨(Dave Hanson)과 크리스 프레이저(Chris Fraser)가 만들었다. 아래에 설명하겠지만 이를 기반으로 하는 컴파일러가 몇몇 존재한다.
- lcc-win lcc-win
위의 LCC를 바탕으로 한 윈도우용 C언어 컴파일러. 제이컵 나비아(Jacob Navia)가 만들었다. 월간 마이크로소프트웨어를 통해 국내에 소개된 적이 있다.
- Pelles C 공식 사이트
위의 LCC를 기반으로 스웨덴의 펠레 오리니우스(Pelle Orinius)가 개발한 컴파일러. 윈도우 전용의 프리웨어 통합 개발 환경이다. MS와는 다르게 C99는 물론이고, C11도 완벽 지원하는 컴파일러를 제공한다. 게다가 툴이 가볍고 무료다.
- ICC (Intel C++ Compiler) 위키백과 영문 공식 사이트
인텔에서 자기들이 만든 CPU에 최적화된 코드를 만들어 낼 수 있도록 직접 제작한 컴파일러 스위트. 사용 설명서 시작 부분에 '인텔에서 제작하지 않은 CPU에서 구동 시 최적화된 성능을 보장할 수 없습니다.'라고 적혀 있다.# C언어/C++ 및 Fortran 컴파일러를 제공한다. 윈도우에서 설치 시, Visual Studio에 애드온 형태로 설치가 돼서 Visual Studio 내에서 기존 컴파일러 대신에 사용할 수 있다.
컴파일러 이외에도 어셈블리어 단위로 한땀한땀 손으로 최적화한 수치해석 라이브러리#와 다수의 컴퓨터가 동시에 컴퓨팅을 할 때 사용되는 MPI 라이브러리, 코드의 성능을 분석해주는 도구#, 코드 최적화를 도와주는 도구#, 성능에 악영향을 주는 에러를 찾아주는 도구#, 등을 하나로 묶어서 Intel Parallel Studio라는 이름으로 판매한다. 인텔 CPU와 인텔 가속기를 수만 개씩 사용하는 슈퍼컴퓨터 등에서는 매우 자주 쓰이는 유용한 도구.
Intel Parallel Studio는 학생 대상으로 무료로 사용 가능(윈도우용은 Visual Studio 통합 포함)하고, 수치 해석 라이브러리는 일반인 대상으로 무료 사용 가능하다.
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,잘 모르는 사실이지만 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언어로 짜
내가 짠 프로그램에 문제가 가득하단 걸 알았을 때
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] 오라클 보고 있나? [16] 처리할 데이터의 양이 커지면 처리 시간이 지나치게 증가하는 알고리즘.[17] 이는 알고리즘의 문제이지 C언어를 모름으로써 발생하는 문제가 아니다. 굳이 C언어로 프로그래밍을 시작하지 않아도 이산수학과 이론 컴퓨터 과학을 제대로 배우고 익히면 충분하다는 소리다.[18] B언어의 전신이 BCPL인 데서 따온 듯 하다.[19] 과거 새로운 표준이 200x년에 나올 줄 알고 C0x로 불렸으나, 2011년에 등장하여 C11이 됐다. C++ 역시 같은 이유로 C++0x로 불리다가 2011년에 등장하여 C++11이 됐다.[20] 이들은 다른 언어가 아니라 버전이 다르다.
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은 이것을 처음으로 고안한 사람을 애플이 스카우트하면서 거의 애플 소유의 프로젝트가 됐다. 하지만 스티브 잡스의 애플 복귀 이후 애플이 진행하는 대부분의 소프트웨어 프로젝트가 오픈 소스인지라 이것도 역시 오픈 소스로 계속 진행중.