도서 : 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++의 미묘한 차이
- void 포인터와 다른 타입의 포인터 사이의 자동 형변환 : C 언에서는 void 포인터와 다른 타입의 포인터 사이의 형변환이 자동으로 일어나지만, C++에서는 자동 형변환이 되지 않는다. -> void형이 반환형인 malloc 사용시 C언어는 malloc앞에 형변환을 사용하지 않아도 되지만 C++에서는 (*int)같은 형변환을 해주어야 오류가 나지 않는다.
- 지역 변수의 선언 위치 : C 언어에서는 함수의 시작을 비롯한 특정 블록내부에 변수 선언이 올 수 있는데 다른 문장이 나오기 전에만 선언이 가능하다. 그러나 C++에서는 어느 위치든지 변수 선언이 가능하다.
- 함수 프로토타입에서 매개 변수가 없는 경우의 해석 : void func(){printf("test");} 라는 함수선언을 했다고 가정했을 때, func(1,2)를 넣는다면? C++에서는 오류가 나지만 C에서는 오류가 나지 않는다. C++에서는 매개 변수가 없는 함수일 경우 void를 넣어주어 어떠한 변수도 받지 못하게 한다. C에서는 이러한 과정도 어떤 변수를 넣었는지도 검사하지 않는다.
- 구조체 변수의 선언 방법 : 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 |
- 결과
'C++ 개념' 카테고리의 다른 글
출력할 수 없는 문자 표현 - 확장열 표기법 (0) | 2019.02.25 |
---|---|
[초보자를 위한 C++ 프로그래밍]setw (0) | 2019.02.23 |
[C++ 프로그래밍 입문]new와 delete (0) | 2019.02.06 |
[C++ 프로그래밍 입문]디폴트 매개 변수 (0) | 2019.02.06 |
[C++ 프로그래밍 입문]함수 오버로딩 (0) | 2019.02.06 |