Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++

  1. C 언어에서 나만의 헤더 파일을 만드는 방법

    이번 글에서는 C 언어로 자신만의 헤더 파일(header file)을 직접 만드는 방법을 알아보겠습니다. 헤더 파일을 만들려면 먼저 새로운 파일을 생성하고, 파일 이름 뒤에 .h 확장자를 붙여 저장하면 됩니다. 헤더 파일에는 main() 함수를 작성하지 않으며, 그 대신 변수나 함수 선언 등 프로그램에서 공통으로 사용할 내용들을 담아둘 수 있습니다.헤더 파일 포함하기만든 헤더 파일을 사용하려면 해당 파일이 실행하려는 프로그램과 같은 디렉터리에 위치해 있어야 합니다. 이후 #include 전처리 지시문을 사용해 헤더 파일 이름을 지정

  2. C/C++ 소켓 프로그래밍으로 구현하는 클라이언트-서버 문자열 반전 시스템

    이번 글에서는 클라이언트와 서버로 구성된 시스템을 만드는 방법을 알아보겠습니다. 클라이언트가 서버에 문자열을 전송하면, 서버는 해당 문자열을 반전(역순)시킨 후 다시 클라이언트에게 반환하는 구조입니다.여기서는 소켓 프로그래밍(Socket Programming) 개념을 활용합니다. 클라이언트와 서버를 연결하려면 포트를 생성해야 하는데, 포트 번호는 소켓이 사용할 수 있는 임의의 숫자입니다. 단, 연결을 성립하려면 클라이언트와 서버가 동일한 포트 번호를 사용해야 합니다.프로그램 실행 순서프로그램을 시작할 때는 반드시 서버 프로그램을 먼

  3. C++ 문자열 스트림(stringstream) 완벽 가이드: 개념부터 실전 예제까지

    C++에서 stringstream(문자열 스트림)은 문자열 객체를 스트림과 연결해 주는 클래스입니다. 이를 활용하면 마치 cin으로 입력을 읽듯이 문자열로부터 데이터를 자유롭게 읽고 쓸 수 있습니다.문자열을 직접 파싱하는 것보다 훨씬 직관적이고 안전하기 때문에, 단어 분리, 형식 변환 등 다양한 작업에 널리 사용됩니다.stringstream의 주요 메서드stringstream 클래스는 다음과 같은 핵심 메서드와 연산자를 제공합니다.clear(): 스트림의 오류 상태 플래그를 초기화하여 스트림을 재사용할 수 있게 합니다.str():

  4. C++에서 이진 코드(16진수)로 문자열을 숨기는 최선의 방법

    이번 글에서는 문자열을 이진 코드 안에 숨기는 방법을 알아봅니다. 여기서 말하는 이진 코드는 16진수 형태로 표현된 것입니다.동작 원리방법은 매우 간단합니다. C++의 stringstream을 사용하면 10진수를 손쉽게 16진수로 변환할 수 있습니다. 먼저 대상 문자열에서 한 글자씩 읽어 들여 각 문자의 아스키(ASCII) 코드 값을 구한 뒤, 이 값을 16진수로 변환하여 차례대로 출력하면 됩니다.예제 코드#include<iostream> #include<sstream> using namespace std; s

  5. C/C++ 널 종료 문자열(Null-Terminated String) 완벽 이해하기

    널 종료 문자열이란?C 언어에서 문자열은 본질적으로 문자(char)들의 배열입니다. C++의 std::string은 이러한 전통적인 문자 배열을 발전시킨 것으로, 크기 자동 관리, 연산자 오버로딩 등 추가적인 편의 기능을 제공합니다.널 종료 문자열(null-terminated string)은 일련의 문자들로 구성되며, 마지막 요소가 반드시 널 문자(\0)로 끝나는 문자열을 의미합니다. 흥미로운 점은, 큰따옴표(...)를 사용해 문자열 리터럴을 작성하면 컴파일러가 자동으로 이를 널 종료 문자열로 변환한다는 것입니다.널 문자와 문자열의

  6. C++에서 std::string 앞뒤 공백 제거(Trim)하는 가장 좋은 방법

    C++에서 문자열 공백 제거하기문자열 트리밍(trim)이란 문자열의 왼쪽과 오른쪽 끝에 있는 불필요한 공백(whitespace)을 제거하는 작업을 의미합니다. 사용자 입력을 처리하거나 외부 데이터를 파싱할 때 앞뒤 공백 때문에 원치 않는 오류가 발생할 수 있으므로, 문자열을 다루는 프로그램에서 자주 필요한 작업입니다.안타깝게도 C++ 표준 라이브러리의 std::string에는 문자열 자르기 기능이 기본적으로 포함되어 있지 않습니다. 따라서 가장 널리 쓰이고 편리한 방법은 Boost 문자열 알고리즘 라이브러리를 활용하는 것입니다. 이

  7. C/C++에서 float 및 double 값을 비교하는 가장 효과적인 방법

    이번 글에서는 C 또는 C++에서 두 개의 float(부동 소수점) 값 또는 double 값을 비교하는 방법을 살펴보겠습니다. 부동 소수점 수의 비교는 정수 비교와 달리 단순한 등호 연산만으로는 정확한 결과를 얻기 어렵기 때문에 별도의 접근 방식이 필요합니다.float나 double 값을 비교할 때는 반드시 정밀도(precision)를 함께 고려해야 합니다. 예를 들어 3.1428과 3.1415라는 두 수는 0.01 수준의 정밀도에서는 같은 값으로 볼 수 있지만, 0.001 수준에서 비교하면 서로 다른 값입니다.따라서 이러한 기준으

  8. const int*, const int * const, int const *의 차이점 완벽 정리

    C/C++에서는 정수 포인터, 정수 상수, 상수 포인터를 조합하여 다양한 형태의 변수 선언이 가능합니다. 겉보기에는 비슷해 보이지만 각 선언이 지니는 의미는 크게 다릅니다. 이 글에서는 대표적인 세 가지 선언인 const int *, const int * const, int const *의 차이를 살펴보겠습니다.시계 방향/나선형 규칙(Clockwise/Spiral Rule)이란?복잡해 보이는 포인터 선언문을 해석할 때는 시계 방향/나선형 규칙이 매우 유용합니다. 이 규칙은 선언문의 시작점(변수 이름)에서 출발하여 시계 방향으로 돌면

  9. C++에서 extern "C"의 역할 – 네임 맹글링부터 C 코드 연동까지

    extern C 키워드는 C++에서 함수 이름이 C 언어 방식의 링키지(linkage)를 갖도록 만들 때 사용합니다. 이 경우 컴파일러는 함수 이름을 맹글링(mangling)하지 않습니다. extern C를 제대로 이해하려면 먼저 C++의 네임 맹글링이 무엇인지 살펴봐야 합니다. C++ 네임 맹글링(Name Mangling)이란? C++에는 함수 오버로딩(function overloading)이라는 강력한 기능이 있습니다. 이 기능을 활용하면 이름이 같은 함수를 여러 개 만들 수 있으며, 매개변수의 타입과 개수만 다르면 됩니다(반환

  10. C++ 복사 초기화와 직접 초기화의 차이점 완벽 정리

    C++에서 객체를 초기화하는 방식 중 대표적인 것이 복사 초기화(Copy Initialization)와 직접 초기화(Direct Initialization)입니다. 복사 초기화는 복사 생성자(copy constructor)의 개념을 활용합니다. 생성자는 객체를 초기화하기 위해 사용되는 특수한 멤버 함수로, 필요하다면 개발자가 직접 복사 생성자를 정의하여 다른 객체의 값을 복사해 현재 객체를 초기화할 수 있습니다. 반면 직접 초기화는 대입 연산자(assignment operation)를 이용해 수행할 수 있습니다.두 초기화 방식의 가

  11. C++에서 inline 키워드는 언제 써야 할까? 함수·메서드 인라인 선언의 모든 것

    C++에서 inline 키워드는 다양한 위치에서 사용됩니다. 인라인 변수(inline variable)를 만들거나, 인라인 네임스페이스(inline namespace)를 정의할 때도 쓰이고, 무엇보다 인라인 메서드나 인라인 함수를 선언할 때 가장 널리 활용됩니다.인라인 함수란 무엇인가?C++의 인라인 함수는 클래스와 함께 자주 사용되는 강력한 개념입니다. 어떤 함수가 인라인으로 선언되면, 컴파일러는 컴파일 시점에 해당 함수가 호출되는 각 지점마다 함수 코드의 복사본을 직접 삽입합니다. 이를 통해 일반적인 함수 호출 과정에서 발생하는

  12. C++에서 빅 엔디안과 리틀 엔디안 값 변환하는 방법

    C++에서 리틀 엔디안(Little Endian) 값을 빅 엔디안(Big Endian)으로, 혹은 그 반대로 변환하는 방법을 알아보겠습니다. 본격적인 설명에 앞서, 먼저 빅 엔디안과 리틀 엔디안이 무엇인지 간단히 살펴보겠습니다. 빅 엔디안과 리틀 엔디안이란? 시스템 아키텍처에 따라 멀티바이트(multi-byte) 데이터는 메모리에 두 가지 방식으로 저장될 수 있습니다. 상위 바이트(큰 자릿수)를 먼저 저장하는 방식을 빅 엔디안이라고 하고, 하위 바이트(작은 자릿수)를 먼저 저장하는 방식을 리틀 엔디안이라고 합니다. 예를 들어 16

  13. C++ nullptr 완벽 이해하기: NULL과의 차이점과 오버로딩 문제 해결

    C++11부터 도입된 nullptr는 포인터 리터럴(pointer literal)을 나타내는 키워드입니다. nullptr는 std::nullptr_t 타입의 prvalue이며, 모든 포인터 타입 및 멤버 포인터(pointer to member) 타입의 널 포인터 값으로 암시적으로 변환될 수 있는 특징을 가지고 있습니다.이번 글에서는 예제 코드를 통해 nullptr가 어떻게 동작하는지, 그리고 기존의 NULL과 어떤 차이가 있는지 자세히 살펴보겠습니다.NULL 사용 시 발생하는 문제먼저 함수 오버로딩 상황에서 NULL을 사용하면 어떤

  14. C++에서 부동 소수점 값 비교하는 방법

    이 글에서는 C++를 사용하여 두 개의 부동 소수점(floating point) 데이터를 비교하는 방법을 알아보겠습니다. 부동 소수점 비교는 정수 비교와는 성격이 완전히 다르기 때문에 주의가 필요합니다.정밀도(Precision)를 고려한 비교두 부동 소수점 값을 비교할 때는 반드시 정밀도를 함께 고려해야 합니다. 예를 들어, 두 숫자가 각각 3.1428과 3.1415라고 가정해 보겠습니다. 이 경우 0.01 수준의 정밀도까지는 두 값이 같다고 볼 수 있지만, 0.001처럼 더 세밀한 정밀도로 비교하면 서로 다른 값입니다.이러한 기준

  15. Visual Studio 2012에서 라이브러리를 포함하는 방법 총정리

    Visual Studio 2012에서 라이브러리를 추가하는 두 가지 방법Visual Studio 2012에서 외부 라이브러리를 프로젝트에 포함시키는 방법은 크게 두 가지로 나눌 수 있습니다. 첫 번째는 수동 설정 방식으로, 프로젝트 속성을 직접 구성하는 전통적인 방법이며, 두 번째는 코드를 이용한 방식으로, 컴파일러 지시문(#pragma)을 활용하는 간편한 방법입니다.먼저 가장 일반적으로 사용되는 수동 설정 방법부터 살펴보겠습니다.방법 1: 수동 설정으로 라이브러리 추가하기라이브러리를 수동으로 추가하려면 다음의 다섯 단계를 순서대로

  16. G++로 여러 개의 .cpp 및 .h 파일 한 번에 컴파일하는 방법

    C++ 프로젝트가 커지면 코드를 여러 파일로 나누어 관리하게 됩니다. 이때 헤더 파일(.h)과 소스 파일(.cpp)을 각각 따로 컴파일해야 한다면 번거로울 수 있습니다. 다행히 G++ 컴파일러를 사용하면 여러 파일을 한 번의 명령으로 함께 컴파일할 수 있습니다.기본 문법여러 개의 파일을 동시에 컴파일하려면 파일 이름들을 공백으로 구분하여 나열하면 됩니다. 예를 들어 file_name.h와 file_name.cpp 같은 파일들을 한꺼번에 처리할 때 명령어 형식은 다음과 같습니다.g++ abc.h xyz.cpp컴파일이 정상적으로 완료되

  17. C++11에서 스레드를 안전하게 종료하는 방법 – std::promise와 std::future 활용하기

    C++11에서는 스레드를 강제로 종료하는 직접적인 메서드가 제공되지 않습니다. 이는 임의의 시점에 스레드를 강제 종료하면 리소스 누수나 데드락 같은 심각한 문제가 발생할 수 있기 때문입니다. 대신 std::promise와 std::future를 조합하면 스레드에 우아한 종료 신호를 전달할 수 있습니다.promise와 future를 이용한 종료 신호 전달std::future<void>를 스레드 함수에 전달하고, future에 값이 설정되면 스레드가 종료되도록 설계할 수 있습니다. 실제 값을 전달할 필요가 없고 단순히 종료

  18. C++에서 Ctrl+C(SIGINT) 이벤트를 포착하는 방법

    Ctrl+C는 현재 실행 중인 작업에 인터럽트(interrupt) 신호를 보내는 키 조합입니다. 이 글에서는 C++에서 Ctrl+C 이벤트를 포착(catch)하는 방법을 알아보겠습니다.시그널(Signal)이란?Ctrl+C는 C/C++에서 하나의 시그널(signal)로 처리됩니다. 따라서 시그널 포착 기법을 사용하면 이 이벤트를 감지할 수 있습니다. Ctrl+C에 해당하는 시그널 코드는 SIGINT(Signal for Interrupt, 인터럽트용 시그널)입니다.시그널은 signal() 함수를 통해 포착할 수 있으며, 이 함수에 콜백

  19. C++ 클래스에서 const 멤버 변수를 초기화하는 방법

    C++에서 const로 선언된 멤버 변수는 일반적인 대입 방식으로는 초기화할 수 없습니다. 상수 멤버 변수는 객체가 생성되는 시점에 반드시 값이 정해져야 하기 때문에, 이를 위해서는 생성자의 초기화 리스트(initializer list)를 사용해야 합니다. 초기화 리스트란? 초기화 리스트는 클래스의 데이터 멤버를 초기화하기 위해 사용하는 문법으로, 생성자 이름 뒤에 콜론(:)을 붙이고 그 뒤에 초기화할 멤버들을 나열하는 방식입니다. 여러 개의 멤버를 초기화할 때는 각 멤버를 쉼표(,)로 구분하면 됩니다. 참고로 const 멤버

  20. C++ 코드가 32비트 또는 64비트로 컴파일되었는지 확인하는 방법

    C++에서 컴파일 아키텍처(32비트/64비트) 확인하기C++ 표준에는 프로그램이 실행되는 환경의 아키텍처를 직접 확인하는 기능이 제공되지 않습니다. 대신 전처리기 매크로(preprocessor macro)를 활용하면 컴파일 시점에 시스템이 32비트인지 64비트인지 판별할 수 있습니다.Windows 환경에서는 _WIN64와 _WIN32라는 두 가지 매크로를 사용할 수 있습니다. 코드가 64비트로 컴파일되면 _WIN64 매크로가 정의되며, 32비트로 컴파일되면 _WIN32 매크로가 정의됩니다. 이러한 매크로 검사를 통해 현재 빌드된 아

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:60/300  20-컴퓨터/Page Goto:1 54 55 56 57 58 59 60 61 62 63 64 65 66