본문으로 바로가기

C언어의 탄생

벨 연구소에서 Unix 운영체제를 만들고 있던 연구원 중 데니스 리치(dennis ritchie), 켄 톰슨(ken thompson)에 의해 1972 C언어가 탄생했다.

어셈블리 언어보다 간편한 언어를 직접 만들어야 했는데, BASIC, Fortran과 같은 언어보다 더 간편한 언어였다.

 

C 언어의 대중화에 같이 Unix 운영체제를 개발하던 커닝햄(brian wilson kernighan)이 C 언어 교재를 집필하면서 C 언어가 대중화되었다. 초보자가 보기에는 무리가 있는 책이지만 아직까지도 참고되고 있다.

 

 

 

C 언어의 특징

[장점]

프로그램의 효율성을 높일 수 있다.
강력하면서도 유연하다.

하드웨어를 제어하기에 좋다.
프로그래머 중심이다. (프로그래머가 GC도 알아서 해야한다)
다른 시스템으로 이식하기 좋다.

 

[단점]

프로그래머가 거의 모든 것을 컨트롤 해야 한다.

 

[이용 분야]

Unix 운영 체제
게임
임베디드
로보틱스

블록 체인

 

그러나, 일반적인 프로그래밍은 가능은 하나 적합하지 않다. 2010년대 부터는 데스크톱 애플리케이션보다 웹, 스마트폰 애플리케이션의 활용도가 높아져서, 하드웨어 컨트롤이 중요한 분야가 아니면 C를 써야 할 이유가 거의 없다. 

 

 

C 언어의 표준

시대에 따라 C언어의 표준은 변화해 왔다.

Cxx 꼴로, 지정된 연도가 붙는다.

 

- 1972 C: 최초 탄생
- 1978 K&R C (Classic C)

브라이언 커니핸과 데니스 리치가 쓴 The C Programming Language을 기반으로 함. 유닉스와 함께 제공된 라이브러리가 사실상 표준

 

1989 ANSI C(C89), 1990 ISO C(C90)

1990년에 ANSI가 C언어 표준을 국제 표준화기구(ISO)에 넘기면서 내용 변화 없이 ISO/IEC 9899:1990라는 또 다른 공식 명칭으로도 채택되었다. 내용 자체는 먼저 제정된 ANSI C와 동일하기 때문에 C90이라고 부르기도 하지만 보통은 먼저 승인된 C89가 더 많이 불려진다.

 

C언어의 철학이 정립됨.

  • 프로그래머를 믿어라. (Trust the programmer)
  • 프로그래머가 작업을 못하게 방해하지 마라. (Don't prevent the programmer from doing what needs to be done)
  • 언어를 작고 간단하게 유지하라. (Keep the language small and simple)
  • 명령을 실행하는 방법을 하나만 제공하라. (Provide only one way to do an operation)
  • 호환성은 장담할 수 없더라도 빨리 작동하게 만들어라. (Make it fast, even if it is not guaranteed to be portable)

- 1995 C95

국제화됨


- 2011 C11

인라인 함수, 가변 길이 배열 및 가변 배열 원소, IEEE 754 부동 소수점 지원 강화, 가변 매크로 인수 등의 새로운 기능들이 추가

멀티 프로세서 대응. (CPU 다중 코어에 대응하여 동시성 프로그래밍 가능. Go에서 이 부분에 특화되어 있음.)

- 1999 C99

 현재 가장 많이 사용되는 C 표준

- 2018 C18

11 표준의 결함에 대한 기술적인 수정 및 설명

 

 

그래서 무슨 표준을 사용해야 하는가? 현재는 C99가 많이 사용되고 있다.

 

 

 

 

overall

// 전처리기(preprocessor)
#include <stdio.h>

// main 함수. reserved word.
int main() {  // scope 시작!

  int a;                                         // variable declaration
  a = 1;                                         // assignment
  
  printf("hey guys. this is C and a is %i", a);  // 함수 호출(call, invoke)
  
  return 0;                                      // exited with  code=0
}  // scope 끝

 

변수를 사용하는 이유?

 

특정한 값이 담긴 RAM 메모리 상의 주소를 기억할 필요 없이, 쉽게 사용할 수 있기 때문

cpu는 연산, RAM은 해당 값을 저장하고 있음

 

자료형이 필요한 이유? 

 

RAM 상에 할당하는 공간도 다름. 효율적인 메모리 사용을 위해 자료형 필요.

boolean : 참/거짓만 존재하므로 1byte
char : 1byte (자바는 2byte)
byte는 당연히 1byte

int는 4byte인데 이보다 작은 short는 2byte, 큰 long은 8byte.
float은 4byte고 double은 이의 2배인 8byte
  • int는 10자리 수, 대략 20억까지의 값을 다룰 수 있다. 따라서 7~9 자리 정도 되는 수를 다루면 long을 사용하자.
  • float는 소수점 이하 6자리의 정밀도를 갖고 있고, double은 소수점 이하 15자리의 정밀도를 갖고 있다. 하지만 double형도 15자리 이하로는 오차가 있을 수 밖에 없기 때문에, 소수점을 연산할 때에는 오차가 발생할 수 있음을 항상 인지해야 한다.
  • C언어에선 char가 1byte 인데, 자바에서는 2byte단위로 사용된다

 

 

 

printf

 

%.2f 꼴로 소수점 제한 가능

#include <stdio.h>

int main() {
	printf("%d + %d = %d\n", 2, 3, 5); // decimal

	printf("%f\n", 3.141592); // float
	printf("%.2f\n", 3.141592); // falot (소숫점 2자리)
    
	printf("%.2lf", height); // double은 %lf 사용 권장. scanf로 값을 받을 때는 %lf가 강제됨

	printf("%g\n", 13576457); // %g simplifiers of the scientific notation floats %e
	printf("%.3g\n", 891728457634765);

	printf("%c %c\n", 97, 'b'); // char

	printf("%s\n", "what's up guys"); // string
}

추가로, 문자열을 입력/출력은 아래와 같이 %s를 이용합니다

#include <stdio.h>

int main(void){
  char a[256];
  scanf("%s", a); // 문자열 입력받기. %s를 사용한다. &(포인터)는 없어도 된다.
  
  printf("%s", a); // 출력할때도 %s
}

 

 

C keyword(reserved word)

en.cppreference.com/w/c/keyword

 

This is a list of reserved keywords in C. Since they are used by the language, these keywords are not available for re-definition.

 

쉽게 말해 그냥 예약어 입니다. 솔직히 예약어와 겹치는 이름으로 선언할 일이 없습니다. 훑고 넘어갑시다.

그리고, 언더바로 시작하는 변수를 선언하는 것을 자제합시다.

 

 

 

The most common keywords that begin with an underscore are generally used through their convenience macros:

+ Also, each name that begins with a double underscore __ or an underscore followed by an uppercase letter is reserved: see identifier for details.

 

 


darren, dev blog
블로그 이미지 DarrenKwonDev 님의 블로그
VISITOR 오늘 / 전체