의사결정 구조는 프로그래머가 프로그램에 의해 평가되거나 테스트될 하나 이상의 조건을 지정하고, 조건이 참으로 판정되면 실행될 문장(들), 그리고 선택적으로 조건이 거짓으로 판정되면 실행될 다른 문장(들)을 지정하도록 요구합니다. 대부분의 프로그래밍 언어에서 찾아볼 수 있는 일반적인 의사결정 구조의 형태는 다음과 같습니다. C++ 프로그래밍 언어는 다음 유형의 의사결정 문을 제공합니다. 번호문장 및 설명 1if 문불리언 표현식 뒤에 하나 이상의 문장으로 구성됩니다. 2if...else 문if 문 뒤에 선택적 else 문이 따라올
코드 블록을 여러 번 실행해야 하는 상황이 있을 수 있습니다. 일반적으로 문장은 순차적으로 실행됩니다: 함수의 첫 번째 문장이 먼저 실행되고, 그 다음 두 번째, 이런 식으로 진행됩니다. 프로그래밍 언어는 더 복잡한 실행 경로를 허용하는 다양한 제어 구조를 제공합니다. 루프 문(statement)은 문장이나 문장 그룹을 여러 번 실행할 수 있게 하며, 대부분의 프로그래밍 언어에서 루프 문의 일반적인 형태는 다음과 같습니다. C++ 프로그래밍 언어는 루핑 요구사항을 처리하기 위해 다음 유형의 루프를 제공합니다. 번호루프 유형 및
연산자(operator)는 컴파일러에게 특정 수학적 또는 논리적 조작을 수행하도록 지시하는 기호입니다. C++은 풍부한 내장 연산자를 제공하며 다음과 같은 유형이 있습니다. 산술 연산자 관계 연산자 논리 연산자 비트 연산자 대입 연산자 기타 연산자 이 장에서는 산술, 관계, 논리, 비트, 대입 및 기타 연산자를 하나씩 살펴보겠습니다. 산술 연산자 C++ 언어가 지원하는 산술 연산자는 다음과 같습니다. 변수 A가 10, 변수 B가 20을 담고 있다고 가정하면: 연산자설명예시 +두 피연산자 더하기A + B = 30 -첫 번째 피
저장 클래스(storage class)는 C++ 프로그램 내에서 변수와/또는 함수의 범위(가시성)와 수명(life-time)을 정의합니다. 이 지정자들은 수정하는 타입 앞에 위치합니다. C++ 프로그램에서 사용할 수 있는 저장 클래스는 다음과 같습니다. auto register static extern mutable auto 저장 클래스 auto 저장 클래스는 모든 지역 변수의 기본 저장 클래스입니다. { int mount; auto int month; } 위 예제는 동일한 저장 클래스를 가진 두 변수를 정
C++은 char, int, double 데이터 타입에 수정자(modifier)를 앞에 붙일 수 있게 합니다. 수정자는 기본 타입의 의미를 변경해 다양한 상황에 더 정확히 맞도록 합니다. 데이터 타입 수정자는 다음과 같습니다. signed unsigned long short signed, unsigned, long, short 수정자는 정수 기본 타입에 적용할 수 있습니다. 또한 signed와 unsigned는 char에, long은 double에 적용할 수 있습니다. signed와 unsigned는 long 또는 short 수
상수(constants)는 프로그램이 변경할 수 없는 고정값을 말하며, 이를 리터럴(literals)이라고 부릅니다. 상수는 기본 데이터 타입 중 어느 것이든 될 수 있으며, 정수 리터럴, 부동소수점 리터럴, 문자, 문자열, 불리언 값으로 나눌 수 있습니다. 상수는 값이 정의 후 수정될 수 없다는 점을 제외하면 일반 변수처럼 취급됩니다. 정수 리터럴 정수 리터럴은 10진수, 8진수, 16진수 상수가 될 수 있습니다. 접두사가 밑(radix)을 지정합니다: 16진수는 0x 또는 0X, 8진수는 0, 10진수는 접두사 없음. 정수 리
범위(scope)는 프로그램의 한 영역을 말하며, 크게 세 곳에서 변수를 선언할 수 있습니다. 함수 또는 블록 내부 → 지역 변수(local variables) 함수 매개변수 정의 내부 → 형식 매개변수(formal parameters) 모든 함수 외부 → 전역 변수(global variables) 함수와 매개변수는 이후 장에서 배우겠습니다. 여기서는 지역 변수와 전역 변수가 무엇인지 설명하겠습니다. 지역 변수 함수나 블록 내부에서 선언된 변수를 지역 변수라 합니다. 그 함수나 코드 블록 내부의 문장에서만 사용할 수 있습니다.
변수는 프로그램이 조작할 수 있는 명명된 저장소를 제공합니다. C++의 각 변수는 특정 타입을 가지며, 이는 변수 메모리의 크기와 레이아웃, 해당 메모리에 저장할 수 있는 값의 범위, 변수에 적용할 수 있는 연산 집합을 결정합니다. 변수 이름은 문자, 숫자, 밑줄 문자로 구성할 수 있으며, 문자나 밑줄로 시작해야 합니다. C++은 대소문자를 구분하므로 대문자와 소문자는 서로 다릅니다. 지난 장에서 설명한 C++의 기본 변수 타입은 다음과 같습니다. 번호타입 및 설명 1booltrue 또는 false 값을 저장합니다. 2char일반
프로그램 주석은 C++ 코드에 포함할 수 있는 설명문입니다. 이 주석들은 소스 코드를 읽는 누구에게나 도움을 줍니다. 모든 프로그래밍 언어는 어떤 형태로든 주석을 허용합니다. C++은 한 줄 주석과 여러 줄 주석을 모두 지원합니다. 주석 내의 모든 문자는 C++ 컴파일러에 의해 무시됩니다. C++ 주석은 /*로 시작해 */로 끝납니다. 예: /* This is a comment */ /* C++ comments can also * span multiple lines */ 주석은 //로 시작해 줄 끝까지 이어질 수도 있습니다. 예:
C++ 프로그램을 고려할 때, 이는 서로 메서드를 호출하며 소통하는 객체들의 집합으로 정의할 수 있습니다. 이제 클래스, 객체, 메서드, 인스턴스 변수가 무엇인지 간단히 살펴보겠습니다. 객체(Object) − 객체는 상태와 행동을 가집니다. 예: 개는 색상, 이름, 품종이라는 상태와 꼬리 흔들기, 짖기, 먹기라는 행동을 가집니다. 객체는 클래스의 인스턴스입니다. 클래스(Class) − 클래스는 그 타입의 객체가 지원하는 행동/상태를 기술하는 템플릿/청사진으로 정의할 수 있습니다. 메서드(Methods) − 메서드는 기본적으로 행
로컬 환경 설정 C++ 개발 환경을 구축하려면 컴퓨터에 다음 두 가지 소프트웨어가 필요합니다. 텍스트 에디터 프로그램을 작성하는 데 사용됩니다. 윈도우 메모장, OS Edit 명령, 브리프(Brief), 엡실론(Epsilon), 이맥스(EMACS), 빔(vim) 또는 비(vi) 등이 있습니다. 운영체제에 따라 에디터의 이름과 버전이 다를 수 있습니다. 예를 들어 윈도우에서는 메모장을, 윈도우·리눅스·유닉스에서는 빔이나 비를 사용할 수 있습니다. 에디터로 생성한 파일을 소스 파일이라 하며, C++의 경우 일반적으로 .cpp, .cp
C++은 정적 타입, 컴파일 방식, 범용, 대소문자 구분, 자유 형식의 프로그래밍 언어로, 절차적, 객체 지향, 제네릭 프로그래밍을 지원합니다. C++은 고급 언어와 저급 언어의 특징을 모두 갖추고 있어 중급 언어(middle-level)로 간주됩니다. C++은 1979년 벨 연구소의 비야네 스트롭스트룹(Bjarne Stroustrup)이 C 언어의 확장판으로 개발을 시작했으며, 원래 C with Classes라는 이름으로 불리다가 1983년 C++로 이름이 변경되었습니다. C++은 C의 상위 집합(superset)으로, 사실상 모
C 프로그램이 실행될 때 명령행에서 프로그램으로 값을 전달할 수 있습니다. 이러한 값을 명령행 인자라고 하며, 값을 코드 내에 하드코딩하는 대신 외부에서 프로그램을 제어하고 싶을 때 특히 중요합니다. 명령행 인자는 main() 함수의 인자로 처리되며, argc는 전달된 인자의 개수를, argv[]는 프로그램에 전달된 각 인자를 가리키는 포인터 배열입니다. 명령행에서 인자가 제공되었는지 확인하고 그에 따라 동작하는 간단한 예제입니다. 2) { printf(Too many arguments supplied.\n);
이 장에서는 C 언어의 동적 메모리 관리를 설명합니다. C 프로그래밍 언어는 메모리 할당과 관리를 위한 여러 함수를 제공하며, 이 함수들은 <stdlib.h> 헤더 파일에 있습니다. 번호 함수 및 설명 1 void *calloc(int num, int size);크기가 size 바이트인 num개의 요소로 구성된 배열을 할당합니다. 2 void free(void *address);address가 지정하는 메모리 블록을 해제합니다. 3 void *malloc(size_t size);size 바이트 크기의
미리 정해진 매개변수 개수 대신 가변 개수의 인자, 즉 매개변수를 받을 수 있는 함수가 필요한 상황을 마주할 수 있습니다. C 프로그래밍 언어는 이 상황에 대한 해결책을 제공하며, 요구사항에 따라 가변 개수의 매개변수를 허용하는 함수를 정의할 수 있습니다. 다음 예제는 그러한 함수의 정의를 보여줍니다. int func(int, ...) { ... } int main() { func(1, 2, 3); func(1, 2, 3, 4); } 함수 func()의 마지막 인자가 생략 부호(세 개의 점 ...)이고, 생략
재귀는 자기 유사한 방식으로 항목을 반복하는 과정입니다. 프로그래밍 언어에서 프로그램이 같은 함수 내부에서 함수를 호출하도록 허용하면, 이를 함수의 재귀 호출이라고 합니다. void recursion() { recursion(); /* 함수가 자기 자신을 호출 */ } int main() { recursion(); } C 프로그래밍 언어는 재귀, 즉 함수가 자기 자신을 호출하는 것을 지원합니다. 하지만 재귀를 사용할 때 프로그래머는 함수에서 빠져나갈 종료 조건을 신중하게 정의해야 합니다. 그렇지 않으면 무한 루프에 빠
C 프로그래밍은 직접적인 에러 처리 지원을 제공하지 않지만, 시스템 프로그래밍 언어로서 반환 값을 통해 하위 수준 접근을 제공합니다. 대부분의 C 또는 Unix 함수 호출은 에러 발생 시 -1 또는 NULL을 반환하고 전역 변수인 에러 코드 errno를 설정합니다. 이 변수는 함수 호출 중 에러가 발생했음을 나타냅니다. 다양한 에러 코드는 <error.h> 헤더 파일에 정의되어 있습니다. 따라서 C 프로그래머는 반환 값을 확인하고 반환 값에 따라 적절한 조치를 취할 수 있습니다. 프로그램을 초기화할 때 errno를 0으로
한 데이터 타입을 다른 타입으로 변환하는 것을 타입 캐스팅 또는 타입 변환이라고 합니다. 예를 들어, long 값을 일반 정수에 저장하려면 long을 int로 타입 캐스팅할 수 있습니다. 캐스트 연산자를 사용하여 한 타입의 값을 다른 타입으로 명시적으로 변환할 수 있습니다. (타입_이름) 표현식 캐스트 연산자가 한 정수 변수를 다른 정수 변수로 나누는 연산을 부동소수점 연산으로 수행하게 하는 다음 예제를 살펴보세요. Live Demo #include <stdio.h> main() { int sum = 17, co
헤더 파일은 .h 확장자를 가진 파일로, 여러 소스 파일 간에 공유되는 C 함수 선언과 매크로 정의를 포함합니다. 헤더 파일은 프로그래머가 직접 작성하는 파일과 컴파일러와 함께 제공되는 파일, 두 가지 유형이 있습니다. C 전처리 지시문 #include를 사용하여 프로그램에서 헤더 파일을 요청할 수 있습니다. 이는 컴파일러와 함께 제공되는 stdio.h 헤더 파일의 포함에서 본 바와 같습니다. 헤더 파일을 포함하는 것은 헤더 파일의 내용을 복사하는 것과 같지만, 직접 복사하지 않는 이유는 오류가 발생하기 쉽고, 특히 프로그램에 여러
C 전처리기는 컴파일러의 일부가 아니지만, 컴파일 과정에서 별도의 단계로 수행됩니다. 간단히 말해, C 전처리기는 텍스트 치환 도구이며 실제 컴파일 전에 필요한 전처리 작업을 컴파일러에 지시합니다. 앞으로 C 전처리기를 CPP라고 부르겠습니다. 모든 전처리기 명령은 해시 기호(#)로 시작합니다. 이는 첫 번째 공백이 아닌 문자여야 하며, 가독성을 위해 전처리 지시문은 첫 번째 열에서 시작하는 것이 좋습니다. 다음 섹션에서는 중요한 전처리 지시문들을 나열합니다. 번호 지시문 및 설명 1 #define전처리기 매크로를 치환
C 언어