본문 바로가기
코스웨어/12년 내장형하드웨어

[2012내장형]2012/12/16 작업일지(c와 c++ 의 차이점) -by. 이창현

by 알 수 없는 사용자 2012. 12. 16.
728x90
반응형

C와 C++의 화면 출력시 차이점.

그림 1) C에서 화면 출력 하는 함수.

1. 우선 간단하게 C++에 대해서 말한다면 C의 확장판이라고 할수 있다. 달라진 점이라고 한다면 C에서는 구조체를 사용하지만 C++에서는 구조체도 있지만 구조체의 확장판인 클래스라는 개념이 나온다. 클래스란 구조체에는 변수를 선언하고 정의를 할 수 있었지만 클래스는 변수 선언, 정의 및 함수 선언과 정의를 더 추가 되어졌다. 물론 여기서는 클래스에 대해서 자세히 하지 않는다. 그리고 또 추가 되어진건 객체라는 점이다. C는 구조적 프로그램을 지향 한다. 말그대로 순차적인 구조로 짜여진다. 하지만 C++에서는 객체라는 개념이 생겨서 프로그램 코드를 짤때는 순차적으로 하지 않아도 된다는 것이다. 물론 자세한건 여기서 다루지 않는다. 그럼 여기서 다루는 것은 무엇이냐? ㅎㅎ 궁금한가? 궁금 해야 한다. ㅎㅎ 그게 내가 바라는 것이니깐.... 여기서 다루는 것은 일단 C에서는 가장 먼저 HelloWorld라는 프로그램을 짜는데 거기서 화면에 출력하는 함수를 호출하여 화면에 출력한다. 그렇다.. 여기서는 C에서 화면에 출력할려면 어떤 헤더 파일을 include를 시키며 C++에서는 어떤 헤더 파일을 include 시켜서 어떤 함수를 호출하여 화면에 출력시키는지를 알아 볼 것이다. 일단 그림 1)은 평상 적인 C에서 작성하는 HelloWorld 프로그램이다.

#include <stdio.h>

라는 부분을 보면 stdio.h 라는 헤더 파일을 include 시키는 것을 볼 수있다. stdio는 StandardInputOutput의 약자로 한마디로 자주쓰는 표준 입출력을 담당하는 헤더 파일이다.

printf("HelloWorld!!\n");

라는 코드가 있다. 이 부분이 C에서 화면에 출력 하는 함수 printf 라는 함수로 stdio.h 라는 헤더 파일에 정의 되어 있는 함수를 호출한 것이다. 물론 이 부분은 VisualStudio 버전에 따라서 컴파일의 버전도 바꼈으므로 이 구문은 6.0 컴파일에서는 아무 문제없이 뜨지만 2005 버전에서는 경고 메시지가 뜬다. C에서는 이렇게 printf 라는 함수를 호출하여 화면에 출력시킨다.

그림 2) C언어로 컴파일 시킨 후 실행 화면.

2. 그림 2)는 그림 1)의 소스를 컴파일 하여 실행 시킨 화면이다. 역시 화면에 HelloWorld!!라는 문자를 출력하는 것을 볼 수 있다.

그림 3) C++에서 화면에 출력하는 함수.

3. 그림 3)은 C++에서의 HelloWorld!!라는 문자를 출력 시키기 위한 소스이다.

#include <iostream>

이라는 부분을 볼 수 있는데 이 부분이 C와 다른 부분중에 하나이다. 이 부분은 컴파일에 따라서 #include <iostream.h> 라고 해도 되기도 하지만 내가 사용한 환경에서는 되지 않았다. 일단 환경을 살짝 언급 하자면 윈도우 7 64bit 환경에 VisualStudio 2010 버전에서 짜여진 것 이다. 그런데도 할 수 있었던 이유는 나중에 다시 언급 하도록 하겠다. 일단 iostream 은 InputOutputStream 의 약자로 입출력 흐름을 제어 할 수 있는 헤더 파일이다. 일단 include를 시키는 부분에서도 다르지만

cout << "HelloWorld!!" << endl;

이라는 부분이 C++에서 화면에 출력 하는 함수다. 분명 C와는 많이 달라 보인다. 자세히 보면 << 이라는 부분이 보일 것 이다. 아까도 헤더 파일을 봤지만 역시 이 부분은 어디선가 자주 본듯한 부분이다. 맞다 바로 비트 연산에서 자주 보던 부분이다. stream 흐름 즉 흐름을 제어 하여 화면에 출력을 시키는 원리로 되어 있다. 물론 이 부분은

cout << "HelloWorld!!\n";

이렇게도 사용 할 수 있다. 또 다른 차이점이 있다면 printf 함수에서는 16진수와 8진수를 %X 나 %O를 사용 하여 출력 할 수 있었다. 하지만 cout 함수는 printf 함수처럼 바로 16진수나 8진수를 사용 하기가 어렵다. 하지만 다른 방법으로 사용은 가능하다.

그림 4) C++ 언어로 컴파일 시킨 후 실행 화면.

4. 그림 4)는 그림 3)의 소스로 컴파일 하여 출력 시킨 화면이다. C 언어로 컴파일 하여 출력시킨 결과가 똑같이 나오는 것을 확인 할 수 있다.

그림 5) 64bit 환경에서 캄파일시 생기는 오류.

5. 마지막으로 팁을 던지자면 아까 나의 프로그램 개발 환경이 윈도우 7 64bit 환경이라고 언급 한것을 알 것이다. 그런데 화면에서는 결과가 출력 된 것을 볼 수 있었을 것이다. 하지만 원래 대로 하였다면 그림 5) 처럼 링크 에러가 난다. 이유는 include를 시키는 헤더 파일에 있는데 바로 kernel32.lib 라는 것 64bit 환경에는 32bit 환경이 맞지 않아서 이런 링크 에러가 난다. 그런데 어떻게 컴파일이 되었냐면 이것은 VisualStudio 2010 을 깔때 어떻게 까는냐에 달려 있다. VisualStudio 2010 버전에서 제공 하는 64bit Command 창을 띄우면 정상적으로 컴파일이 가능하다.

728x90