도서 : C++ 프로그래밍 입문(한티미디어)

지음 : 황준하, 김성영

 


  • C에서는 typedef int BOOL; 과 같이 ture 혹은 false를 나타내기 위해 간접적으로 int형을 선언하여 사용했으나 C++에서는 bool타입을 도입하였다. - ex) bool var = 0 또는 1; -> 1이상의 모든 값을 넣어도 1로 인식된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
 
typedef int BOOL;
 
int main(void) {
    BOOL bVar1;
    bool bVar2;
 
    bVar1 = (1 < 2+ (2 < 3);
    bVar2 = (1 < 2+ (2 < 3);
 
    cout << "bVar1 : " << bVar1 << endl;
    cout << "bVar2 : " << bVar2 << endl;
 
    return 0;
}
cs

 

이런 코드를 실행시켜본다면 1<2와 2<3이 둘 다 참이므로 1로 인식하여 1+1이 되고 BOOL형은 int 형이므로 2, bool형은 새롭게 도입된 ture(1) or false(0) 둘 중 하나이므로 1보다 큰 2는 1로 저장된다. 따라서 결과는

 

 

이런 결과가 나온다.

 


  • C와 C++의 미묘한 차이
  1. void 포인터와 다른 타입의 포인터 사이의 자동 형변환 : C 언에서는 void 포인터와 다른 타입의 포인터 사이의 형변환이 자동으로 일어나지만, C++에서는 자동 형변환이 되지 않는다. -> void형이 반환형인 malloc 사용시 C언어는 malloc앞에 형변환을 사용하지 않아도 되지만 C++에서는 (*int)같은 형변환을 해주어야 오류가 나지 않는다. 
  2. 지역 변수의 선언 위치 : C 언어에서는 함수의 시작을 비롯한 특정 블록내부에 변수 선언이 올 수 있는데 다른 문장이 나오기 전에만 선언이 가능하다. 그러나 C++에서는 어느 위치든지 변수 선언이 가능하다.
  3. 함수 프로토타입에서 매개 변수가 없는 경우의 해석 : void func(){printf("test");} 라는 함수선언을 했다고 가정했을 때, func(1,2)를 넣는다면? C++에서는 오류가 나지만 C에서는 오류가 나지 않는다. C++에서는 매개 변수가 없는 함수일 경우 void를 넣어주어 어떠한 변수도 받지 못하게 한다. C에서는 이러한 과정도 어떤 변수를 넣었는지도 검사하지 않는다.
  4. 구조체 변수의 선언 방법 : struct Point { int x,y; }라는 구조체가 있다고 가정했을 때, 메인문에서 이 구조체를 선언할 경우 C에서는 struct Point P1 = { 1, 2 };로 선언하지만 C++에서는 Point P1 = { 1, 2 };라고 선언해도 오류가 나지 않는다. C에서는 이러한 문제 때문에 typedef struct Point Point; 라고 따로 선언하여 사용한다.
  • 연습문제 2.9 - 1부터 100까지 더하는 프로그램을 작성하라. for 문을 사용하고 index용 변수는 for 문의 초기화 구문 내에서 선언하여 사용하도록 하라. 매우 간단한 문제이다. 하지만 이 문제로부터 C++의 경우 어느 위치에서든지 변수 선언이 올 수 있으며 특히 for 문의 index로 다음과 같은 구문을 매우 흔하게 사용함을 알도록 하라.
    • 내가 만든 코드
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
 
int main(void) {
    int result = 0;
 
    for (int i = 1; i < 101; i++) {
        result = result + i;
    }
 
    cout << result << endl;
}
cs
  • 결과

 

+ Recent posts