printf()란?printf()는 주로 C 언어에서 사용되는 출력 함수입니다. 표준 출력(standard out)으로 형식화된 데이터를 출력하며, 콘솔에 내용을 출력할 때 서식 지정자(format specifier)를 함께 사용합니다. 함수의 반환값은 정수형이며, 입력 매개변수에 대한 타입 안전성(type safety)을 보장하지 않는다는 특징이 있습니다. 물론 C++에서도 사용할 수 있습니다.다음은 C와 C++에서 printf()의 기본 문법입니다.printf(문자열과 서식 지정자, 변수명);각 구성 요소는 다음과 같습니다.문자
C++ 프로그래밍에서 현재 날짜와 시간을 확인해야 하는 경우가 자주 있습니다. 이 글에서는 표준 라이브러리의 time()과 ctime() 함수를 활용해 현재 로컬 날짜와 시간을 손쉽게 얻는 방법을 예제와 함께 살펴보겠습니다.예제 코드#include <iostream> using namespace std; int main() { time_t now = time(0); char *date = ctime(&now); &n
리눅스 환경에서 C++ 개발을 시작하려면 어떤 개발 환경(IDE)을 선택해야 할지 고민되기 마련입니다. 이 글에서는 리눅스에서 널리 사용되는 대표적인 C++ IDE 여섯 가지를 소개하고, 각 도구의 주요 특징과 장점을 정리했습니다. 1. Eclipse Galileo + CDT 플러그인 이클립스(Eclipse)는 오픈소스 기반의 크로스 플랫폼 IDE로, 전 세계적으로 가장 널리 알려진 개발 도구 중 하나입니다. CDT 플러그인을 설치하면 완전한 기능을 갖춘 C/C++ 통합 개발 환경을 구성할 수 있습니다. 구문 강조(syntax h
< 연산자와 <= 연산자의 성능 차이아니요, < 연산자는 <= 연산자와 동일한 실행 시간을 가집니다. 두 연산자 모두 유사한 방식으로 동작하며, 명령어를 수행하는 데 걸리는 시간도 완전히 같습니다.컴파일 과정에서 jcc(조건부 점프 명령어)가 생성되며, 비교 유형에 따라 프로그램 흐름이 해당 명령어로 점프합니다. 대표적인 비교 유형은 다음과 같습니다.je − 같으면 점프(Jump if equal)jg − 크면 점프(Jump if greater)jne − 같지 않으면 점프(Jump if no
벡터(Vector)란 무엇인가?벡터는 동적 배열과 유사하지만, 일반 배열과 달리 크기를 자유롭게 조절할 수 있는 시퀀스 컨테이너입니다. 벡터는 요소의 삽입이나 삭제에 따라 크기가 자동으로 변경되며, 컨테이너(Container)란 동일한 타입의 데이터를 담는 객체를 의미합니다.벡터는 향후 요소가 늘어나는 것에 대비해 약간의 여분 저장 공간을 미리 할당할 수 있습니다. 또한 벡터의 요소들은 메모리상에 연속적으로 저장되며, 새로운 데이터는 항상 벡터의 끝에 추가됩니다.예제: 벡터 내용 출력하기다음은 C++에서 벡터의 내용을 출력하는 예제
C++11이란?C++11은 표준 C++ 언어의 주요 버전 중 하나로, 2011년 8월 12일 국제표준화기구(ISO)의 공식 승인을 받았습니다. 이후 C++14와 C++17이 연이어 발표되었으며, C++11은 핵심 언어 자체에 수많은 기능과 개선 사항을 추가한 중요한 업데이트로 평가받고 있습니다.그렇다면 C++11에서는 어떤 새로운 변화가 도입되었을까요? 대표적인 변경 사항을 하나씩 살펴보겠습니다.1. nullptr기존에는 널 포인터를 나타낼 때 정수 값 0을 사용했으며, 이로 인해 정수 타입으로 암묵적으로 변환되는 문제가 있었습니다
전역 변수(Global Variable)는 프로그램 내 어떤 함수의 외부에서 선언하고 정의하는 변수입니다. 전역 변수는 프로그램이 시작될 때 생성되어 종료될 때까지 값을 유지하며, 실행 중 어디서든 접근할 수 있다는 특징이 있습니다.전역 변수가 위험한 이유const로 선언되지 않은 전역 변수는 프로그램 내 어떤 함수든 그 값을 자유롭게 변경할 수 있기 때문에 잠재적으로 위험합니다. 값이 예기치 않게 수정되면 버그를 추적하기 어려워지고, 코드 간 의존성이 높아져 유지보수가 힘들어집니다.또한 전역 변수를 사용하면 프로그램의 모듈성(mo
문자열 리터럴(String Literal)이란?문자열 리터럴은 큰따옴표(" ")로 묶인 일련의 문자 집합을 의미합니다. C와 C++에서는 접두사(prefix)를 활용하여 다양한 인코딩 방식과 형태의 문자열 리터럴을 선언할 수 있으며, 와이드 문자열(wide-string) 리터럴에는 항상 L 접두사가 붙습니다.문자열 리터럴의 종류번호문자열 리터럴 및 설명1" "접두사가 없는 일반 문자열 리터럴 (기본 narrow 문자열)2L" "와이드 문자열 리터럴 (wchar_t 기반)3u8&q
C와 C++에서 동적으로 메모리를 할당하고 해제하는 대표적인 방법으로 new/delete와 malloc/free가 있습니다. 두 방식 모두 힙(heap) 영역의 메모리를 관리하지만, 동작 방식과 특성에서 중요한 차이가 있습니다. 각각의 개념과 예제 코드를 살펴보겠습니다.new / delete 연산자new 연산자는 힙 영역에 메모리 할당을 요청합니다. 요청한 크기의 메모리를 확보할 수 있으면 해당 메모리를 초기화한 뒤 포인터 변수에 그 주소를 반환하고, 메모리가 부족하면 예외(std::bad_alloc)를 발생시킵니다.delete 연
C 언어에서 동적 메모리 할당은 프로그램 실행 중에 필요한 만큼 메모리를 유연하게 확보할 수 있게 해주는 핵심 기능입니다. 이를 담당하는 대표적인 함수가 바로 malloc()과 free()이며, 두 함수는 모두 <stdlib.h> 헤더 파일에 선언되어 있습니다.malloc() 함수란?malloc()(memory allocation)은 요청한 크기만큼의 바이트를 힙(heap) 영역에 할당하고, 할당된 메모리의 첫 번째 바이트를 가리키는 포인터를 반환합니다. 만약 메모리 할당에 실패하면 NULL 포인터를 반환하므로, 반드시
C++11이란?C++11은 표준 C++ 언어의 한 버전으로, 2011년 8월 12일 국제표준화기구(ISO)의 승인을 받았습니다. 이후 C++14와 C++17이 차례로 발표되었습니다. C++11은 핵심 언어에 다양한 기능을 추가했으며, Visual C++는 C++11 기능 중 대부분을 구현하고 있습니다.Visual Studio 2015의 주요 C++11 기능nullptr기존에는 정수 0이 널 포인터 값을 대신했지만, 이는 정수형으로의 암시적 변환이라는 문제점을 안고 있었습니다. C++11에서는 널 포인터 리터럴이 std::nullpt
공용체(Union)는 사용자가 직접 정의하는 데이터 타입으로, 모든 멤버가 하나의 동일한 메모리 공간을 공유하는 구조를 가집니다. 이 때문에 공용체의 전체 크기는 멤버 중 가장 큰 멤버의 크기에 의해 결정됩니다. 두 개 이상의 변수가 같은 메모리 위치를 번갈아 사용해야 하는 상황이라면, 공용체가 가장 효율적인 선택이 됩니다.공용체는 구조체(structure)와 매우 유사한 형태를 띠고 있으며, 변수 선언 방식 또한 구조체와 동일합니다. 다만 C 언어에서 공용체를 정의할 때는 union이라는 키워드를 사용한다는 점이 차이점입니다.공용
C/C++에서 ? 연산자는 세 개의 피연산자를 필요로 하기 때문에 삼항 연산자(Ternary Operator)라고 부릅니다. ? : 형태로 표현되며, 조건 연산자(Conditional Operator)라고도 알려져 있습니다. 이 연산자를 활용하면 if-else 문보다 간결하게 조건 분기를 표현할 수 있어 성능을 높이고 코드 줄 수를 줄이는 데 도움이 됩니다.삼항 연산자의 기본 문법Expression1 ? Expression2 : Expression3세 개의 식(Expression)이 다음과 같은 방식으로 동작합니다.Expressio
C 언어에는 서로 다른 자료형의 데이터를 하나로 묶어 관리할 수 있는 사용자 정의 데이터 타입이 있습니다. 대표적인 것이 바로 구조체(Structure)와 공용체(Union)인데요, 두 개념은 문법이 비슷하지만 메모리를 사용하는 방식에서 근본적인 차이가 있습니다. 이 글에서는 각각의 개념과 문법, 예제 코드를 살펴보고 두 자료형의 핵심 차이점까지 정리해 드립니다.구조체(Structure)란?구조체는 사용자가 직접 정의하는 데이터 타입으로, 서로 다른 자료형의 데이터를 하나의 단위로 묶을 때 사용합니다. 여러 개의 멤버와 구조체 변수
왼쪽 시프트 연산자(<<)왼쪽 시프트 연산자는 왼쪽 피연산자의 값을 오른쪽 피연산자가 지정한 비트 수만큼 왼쪽으로 이동시킵니다. 비트가 왼쪽으로 밀려나면서 오른쪽의 빈 자리는 0으로 채워집니다.왼쪽 시프트는 수학적으로 2의 거듭제곱 곱셈과 같습니다. 즉, x << n은 x × 2ⁿ과 동일한 결과를 냅니다. 예를 들어 28을 1비트 왼쪽 시프트하면 56이 되고, 2비트 시프트하면 112가 됩니다.예제 코드#include <stdio.h>int main() { i
C/C++ 프로그래밍에서 입력받은 문자열이 숫자(정수)로만 구성되어 있는지 확인해야 하는 경우가 자주 발생합니다. 예를 들어 사용자 입력의 유효성을 검사하거나, 파일에서 읽어온 데이터를 처리할 때 이러한 확인 작업이 필요합니다.가장 대표적인 방법은 표준 라이브러리의 isdigit() 함수를 활용하는 것입니다. 이 함수는 전달된 문자가 숫자(0~9)에 해당하는지 판별하여 참 또는 거짓을 반환합니다.isdigit()을 사용한 기본 예제다음은 C++에서 문자열이 정수인지 확인하는 예제 코드입니다.#include<iostream>
배열(array)은 동일한 자료형의 요소들이 연속된 메모리 위치에 나란히 저장되어 있는 자료 구조입니다. 가장 낮은 메모리 주소는 첫 번째 요소에 대응하고, 가장 높은 주소는 마지막 요소에 대응합니다. 배열의 인덱스는 0부터 시작하여 (배열 크기 − 1)에서 끝나며, 배열의 크기는 반드시 0보다 큰 정수여야 합니다.배열 인덱스의 기본 규칙배열 크기 = 10 첫 번째 인덱스 = 0 마지막 인덱스 = 배열 크기 - 1 = 10 - 1 = 9다차원 배열이란?다차원 배열(multi-dimensional array)은 말 그대로 배열의 배열
예외 처리(Exception Handling)는 프로그램 실행 중 발생할 수 있는 비정상적인 상황을 안전하게 처리하기 위한 핵심 메커니즘입니다. C++에서는 try-catch 블록을 사용해 코드를 보호할 수 있으며, 코드 블록 내 어디에서든 예외를 발생시킬 수 있습니다. 이때 예외를 던지는 데 사용되는 키워드가 바로 throw입니다. 예외 처리의 기본 동작 원리 C++의 예외 처리는 다음 세 가지 요소로 구성됩니다. try 블록: 예외가 발생할 가능성이 있는 코드를 감싸는 영역입니다. throw: 문제가 감지되면 예외를 던집니다.
C++ 예외(Exception)란 무엇인가?예외(Exception)는 프로그램 실행 도중, 즉 런타임에 발생하는 문제 상황을 의미합니다. 예외가 발생하면 프로그램은 해당 이벤트를 던지게 되며, 이를 적절히 처리하지 않으면 프로그램이 비정상적으로 종료될 수 있습니다.예외 처리(Exception Handling)는 이러한 문제를 안전하게 다루기 위한 메커니즘입니다. try-catch 블록을 사용하면 예외가 발생해도 프로그램이 중단되지 않고 계속 실행될 수 있도록 코드를 보호할 수 있습니다.catch(...)로 모든 예외 잡기C++에서
프로그래밍 언어를 선택할 때 많은 개발자가 고민하는 질문 중 하나가 바로 C++와 C# 중 어느 것이 더 빠른가?입니다. 이 글에서는 두 언어의 특징과 주요 차이점을 살펴보고, 어떤 상황에서 어떤 언어를 선택하는 것이 좋은지 정리해 드립니다. C++란? C++는 1979년 비야네 스트롭스트룹(Bjarne Stroustrup)이 개발한 중급(middle-level) 프로그래밍 언어입니다. 기존 C 언어를 확장한 형태로, 객체 지향 프로그래밍을 지원하면서도 하드웨어에 가까운 저수준 제어가 가능합니다. 운영체제, 게임 엔진, 임베디드