2015년 8월 4일 화요일

C 언어 - 개념 정리

C 언어
자바 언어와 다르게 실행 환경에 대한 이해가 깊어야 고급 프로그램을 구현할 수 있다

자바 언어는 소스 하나로 다양한 플랫폼에서 실행할 수 있게 하기 위해 컴파일된 코드가 바로 기계어로 변환되지 않고 자바 버추얼 머신이라는 프로세스가 읽고 실행할 수 있는 코드로 변환된다. 자바 버추얼 머신이 이 변환된 코드를 실시간으로 읽고 실행한다

다종 플랫폼 지원
소스 하나로 윈도, 리눅스 또는 유닉스 등의 여러 플랫폼에서 컴파일할 수 있는 코드를 짜기 위해서는 컴파일러의 도움을 받아야 한다. 컴파일러가 플랫폼의 종류 및 CPU architect 등의 시스템 정보를 제공한다

Preprocessor
컴파일 단계에서 먼저 수행되는 코드이며 preprocessor 코드는 수행된 후 결과만 코드에 반영된다. 시스템 또는 컴파일러, 코드 상 정의된 정보들을 이용할 수 있으며 코드로 해결할 수 없는 호환성 문제 해결 또는 편리를 위해 사용한다

#define
컴파일러에 값을 정의한다
예) #define LOG printf
컴파일러가 LOG 이라는 이름으로 실제는 printf 라는 값을 저장
define 문 뒤에 LOG 라고 적힌 부분은 컴파일러가 printf 로 치환한다
치환된 결과는 컴파일러가 컴파일하기 때문에 변환 결과는 눈에 보이지 않는다

미리 define 된 값
32 bit 윈도 비주얼 c 컴파일러는 __WIN32__ 라는 이름의 define 값을 미리 정의 하고 있다. 이 값의 존재 여부로 윈도 플랫폼인지 구분할 수 있다.
예)
#ifdef __WIN32__
    #include <Windows.h>
#endif
플랫폼별 컴파일러에서 제공하는 define 값은 컴파일러 메뉴얼 및 인터넷 검색을 통해 알아 낼 수 있다.

Define 값을 이용해 다종 플랫폼 지원 등의 플랫폼 특성에 따른 코드를 작성할 수 있다.

표준 코드
기본적인 코드는 표준으로 정해 다종 플랫폼 간 고민없이 작성할 수 있도록 하였다
플랫폼에 아주 민감한 코드를 작성할 때는 표준 코드에서도 미묘한 차이가 있을 수 있기 때문에 이런 경우에도 preprocessor 를 이용해 다종 플랫폼 지원하도록 하는 경우도 있다

C++
C++ 언어는 C 언어 문법을 하향지원하기 때문에 C++ 컴파일러는 C 언어 문법으로 작성한 소스를 컴파일 할 수 있다. 반대로 C 컴파일러는 C++ 소스를 컴파일할 수 없다.

C++ 언어는 객체지향 프로그래밍을 지원하며 C 언어에서 제약 사항을 조금 완화한 부분이 있다.

C 언어를 하향지원한다는 이유로 C++ 코드도 C 코드처럼 구현하는 경우가 많은 것으로 알고 있는데 실무 경험상 C 언어 개발자와 C++ 개발자의 코드는 문법적인 부분을 제외하고는 개발하는 방향이 아주 상이하니 애초에 서로 다른 언어로 생각하고 기존에 사용하던 언어처럼 여기지 말고 새로 사용법을 터득하는 것이 좋다

참고로 이 문서는 C 언어를 다루고 있다


댓글 없음:

댓글 쓰기