개발환경 세팅 - Visual Studio에서 코딩하기

Visual Studio를 열고 새 프로젝트 만들기를 클릭

빈 프로젝트를 선택하고 다음을 누른다.

새 프로젝트 구성에는 이름과 위치, 솔루션 이름을 설정할 수 있다.
이름과 폴더 설정 후 만들기 클릭

솔루션 탐색기에서 프로젝트 이름을 우클릭해 추가(D) -> 새항목(W)을 누르고 적당한 파일 이름을 입력한다(main.cpp)

Hello World 출력해보기(C/C++)

C와 C++은 비슷하면서도 코드가 약간 다른데, 한번 비교해보자.

먼저 C는 Hello World! 를 출력하기 위해 아래의 코드처럼 작성해주면 된다.
문자를 출력하기 위해 printf 함수를 사용하고, 해당 함수를 사용하기 위해 Standard Input/Output(stdio.h) 헤더 파일을 코드에 include 해준다.

#include <stdio.h>
int main() {
	printf("Hello World!");
}

다음은 C++에서 Hello World! 를 출력하기 위한 코드이다.
코드를 살펴보면 C언어와 비슷하게 무언가를 include 해주고, int main() { }으로 메인함수를 정의해주고 있으며 C++에서는 std::cout 이라는 함수를 통해서 Hello World! 를 출력하고 있는 것을 볼 수 있다.

#include <iostream>
int main() {
	std::cout << "Hello World!";
}

꺾쇠 중복해 사용하기

#include <iostream>
using namespace std;

int main() {
		int a = 5;
		cout << "Hello " << "World! " << a;

		return 0;
}

위 코드처럼 꺾쇠를 중복해 사용할 수도 있다.
프로그램을 실행하면 Hello World! 5가 출력된다.

endl: 다음 줄(엔터)

#include <iostream>
using namespace std;

int main() {
		cout << "Hello" << endl << endl'

		return 0;
}

C언어에는 \n이 있는 것처럼 C++에는 endl이라는 개행 문자가 있다. END OF LINE의 약자로, 다음 줄로 넘기는 역할을 한다.

따라서 위 코드를 실행하면 아래와 같은 결과를 볼 수 있다.

Hello
(엔터)
(엔터)

숫자를 입력받기(C/C++)

C언어는 무언가를 입력받기 위해서 scanf라는 함수를 사용하는데, C++에서는 std::cin 이라는 코드를 사용해 문자를 입력받는다.

C++ 코드 자세히 살펴보기

iostream

Standard I/O(입출력) 라이브러리

std::cout

C++ 표준 라이브러리(standard)의 cout이라는 출력 스트림 객체

  • std는 Standard의 약어로, C++ 표준 라이브러리에서 사용되는 네임스페이스를 의미한다.
  • cout은 console output의 약어로, C++ 표준 라이브러리에서 제공하는 출력 stream 중 하나를 의미한다.

C++은 함수가 아닌 스트림을 사용하는 이유?

동일한 결과를 도출하는 코드임에도 불구하고 C언어는 printf라는 함수로, C++은 cout이라는 출력 스트림을 사용하고 있다.

C언어는 간단한 입출력 작업에 중점을 두고 함수를 사용하며, C++은 객체 지향 프로그래밍 및 고급 기능을 위해 스트림 기반의 I/O를 사용하는 것이다.

객체 지향 프로그래밍? 절차 지향 프로그래밍?

객체 지향 프로그래밍은 Object - Oriented Programming(OOP)라 하고 절차 지향 프로그래밍은 Procedural Programming(POP)이라고 한다.

(정리 중 입니다.)

I/O Stream을 선호하는 이유

  • Type-safe(타입 안정성)
    • printf에는 %d, %s와 같은 형식 지정자를 사용하는데, 잘못된 형식 지정자를 제공하는 경우 발생할 수 있는 런타임 오류를 방지하는데 도움을 준다.
    • C언어에서 I/O를 잘못 사용하는 흔한 에러 예시는 아래와 같다.
      printf("long pharse %d long pharse %d", 3); //Forget the number of parameters
      
      int a = 3;
      ...many lines of code...
      printf(" %f", a);    // Use the wrong format
      
      scanf("%d", &var1);
      scanf(" %c", &var2);    // whitespace(공백)
  • Less error prone(오류 발생 가능성 감소)
    • I/O스트림을 사용하면 데이터를 출력하거나 읽을 때 형식 지정자가 실제 데이터와 일치시키는 부분에 대한 걱정을 하지 않아도 된다.
    • I/O스트림은 자동으로 형 변환과 형식 지정을 처리하므로, 이러한 오류 가능성을 줄인다.
  • Extensible(확장 가능성)
    • C++에서는 클래스에 대한 연산자 오버로딩이 가능하다.
    • 이를 통해 사용자는 클래스에 대한 <<(출력) 및 >>(입력) 연산자를 정의할 수 있다.
  • Comparable performance(비교가능한 성능)
    • 올바르게 사용한 경우 C언어의 I/O(printf, scanf, etc..)보다 더 빠르다.

관련 문제


글을 작성하며 궁금해 찾아본 것들

  1. C와 C++에서 int main() { } or int main(void) { }은 무엇일까?
  • C언어와 C++ 언어에서 main 함수는 프로그램의 entry point
  • main 함수의 이름은 고정되어 있으며, 이름을 변경할 경우 프로그램이 컴파일되지 않음.
  1. main 함수를 정의할 때 int를 사용하는 이유는?
  • main 함수의 반환 자료형은 int만 허용됨(exit code)
  1. int main()int main(void)의 차이는?
  • 둘 다 매개변수가 없는 함수를 정의하는 방법으로 기능적으로는 동일
  • 하지만 일부 C컴파일러에서는 int main() 처럼 매개변수를 비워둔 함수 정의를 사용할 때 경고를 출력할 수 있음.

수업을 들으며 알게된 것들

#include <iostream>#include "iostream" 의 차이점

  • 꺽쇠(<>)와 쌍따옴표(" ")
    - 쌍따옴표 -> 현재 실행중인 directory 조회 후 standard library가 설치된 디렉토리
    - 꺽쇠 -> standard library가 설치된 디렉토리 조회 후 현재 실행중인 directory 조회
profile
공부한 내용을 기록하고 생각을 정리합니다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN