전체 글 241

[C] C언어 참조 - 바이트 저장 순서, 비트 단위 연산, 음수/실수의 표현

비트(bit)와 바이트(byte)컴퓨터는 모든 데이터를 2진수로 표현하고 처리한다.비트(bit)란 컴퓨터가 데이터를 처리하기 위해 사용하는 데이터의 최소 단위다. 이러한 비트에는 2진수의 값(0과 1)을 단 하나만 저장할 수 있다.바이트(byte)란 위와 같은 비트가 8개 모여서 구성되며, 한 문자를 표현할 수 있는 최소 단위다. 바이트 저장 순서(byte order)컴퓨터는 데이터를 메모리에 저장할 때 바이트(byte) 단위로 나눠서 저장한다. 하지만 컴퓨터가 저장하는 데이터는 대게 32비트(4바이트)나 64비트(8바이트)로 구성된다. 따라서 이렇게 연속되는 바이트를 순서대로 저장해야 하는데, 이것을 바이트 저장 순서(byte order)라고 한다.이때 바이트가 저장되는 순서에 따라 ① 빅 엔디안(bi..

Language/C 2026.06.10

[C] C언어 컴파일 - 헤더 파일, 분할 컴파일, 조건부 컴파일

헤더 파일(header file)C언어에서 함수는 사용되기 전에 먼저 해당 함수의 원형이 선언되어야 한다. 이 원칙은 표준 함수에도 그대로 적용되며, 표준 함수 또한 사용되기 전에 해당 함수의 원형이 선언되어야 한다.이러한 표준 함수의 원형 및 표준 함수와 관련된 다양한 정보를 가지고 있는 파일을 표준 헤더 파일이라고 한다.또한, 사용자는 자신만의 사용자 헤더 파일을 자유롭게 만들 수도 있다.헤더 파일의 확장자는 보통 .h를 사용하며, #include 선행처리 지시자를 사용하여 다른 파일에 포함시킬 수 있다.표준 헤더 파일표준 함수의 원형 및 표준 함수와 관련된 다양한 정보를 가지고 있는 표준 헤더 파일은 그 크기가 상당히 크다. 하지만 크기가 큰 헤더 파일을 포함한다고 프로그램의 크기가 반드시 커지는 ..

Language/C 2026.06.09

[C] C언어 선행처리 - 선행처리기, 매크로 함수

선행처리(preprocess)란?선행처리란 실행 파일을 생성하는 과정에서 소스 파일 내에 존재하는 선행처리 지시문을 처리하는 작업을 의미한다. 이러한 선행처리 작업은 컴파일하기 전 선행처리기(preprocessor)에 의해 먼저 처리된다.선행처리기는 코드를 생성하는 것이 아니라, 컴파일러가 컴파일하기 좋도록 소스를 재구성해 주는 역할만을 한다. 선행처리문의 특징선행처리문은 선행처리 문자(#)로 시작한다.선행처리문은 코드 내에서 하나의 라인을 모두 차지하며, 선행처리문 뒤에 C언어 코드를 추가하여 같이 사용할 수 없다.선행처리문은 다른 C언어의 명령문과는 달리 맨 뒤에 세미콜론(;)을 붙이지 않는다.선행처리문은 소스 파일 어디에나 위치할 수 있지만, 선행처리문이 위치한 곳에서부터 파일의 끝까지만 영향을 미..

Language/C 2026.06.09

[C] C언어 입력과 출력 - 콘솔, 파일, 함수

버퍼(buffer)지금까지 우리가 사용한 printf(), scanf(), puts() 함수 등은 C언어의 표준 입출력 함수다. 이러한 표준 입출력 함수를 사용할 때에는 버퍼(buffer)라는 임시 메모리 공간을 사용하게 된다.장점문자를 하나씩 전달하는 것이 아닌 묶어서 한 번에 전달하므로, 전송 시간이 적게 걸려 성능이 향상된다.사용자가 문자를 잘못 입력했을 경우 수정을 할 수가 있다.단점빠른 반응이 요구되는 게임과 같은 프로그램에서는 키를 누르는 즉시 바로 전달되어야만 하므로 입력 작업에 버퍼를 사용하는 것이 반드시 좋은 것만은 아니다. 버퍼링 방식입출력에 사용되는 버퍼링에는 다음과 같이 두 가지 방식이 있다.완전 버퍼링(fully buffered)완전 버퍼링은 버퍼가 가득 차면 버퍼 안의 내용을 목..

Language/C 2026.06.08

[C] C언어 구조체 - 개념, 포인터, 활용, 공용체와 열거체

구조체란?구조체(structure type)란 사용자가 C언어의 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 타입이다.구조체는 기본 타입만으로는 나타낼 수 없는 복잡한 데이터를 표현할 수 있다.배열이 같은 타입의 변수 집합이라고 한다면, 구조체는 다양한 타입의 변수 집합을 하나의 타입으로 나타낸 것이다. 이때 구조체를 구성하는 변수를 구조체의 멤버(member) 또는 멤버 변수(member variable)라고 한다. 구조체의 정의와 선언C언어에서 구조체는 struct 키워드를 사용하여 다음과 같이 정의합니다.struct 구조체이름 { 멤버변수1의타입 멤버변수1의이름; 멤버변수2의타입 멤버변수2의이름; ...};아래 그림에서 struct라는 키워드를 사용하여 구조체의 시작을 알..

Language/C 2026.06.08

[C] C언어 문자와 문자열 - 입출력, 함수

기본적인 입출력C언어에서는 기억장치에 저장되는 파일을 다루는 것과 마찬가지 방식으로 입출력 장치를 다룬다.따라서 키보드, 모니터와 같은 대부분의 콘솔 장치도 C 프로그램에서는 자동으로 열리는 파일처럼 다뤄진다.C언어에서는 stdin 표준 스트림을 통해 입력 장치를 다루며, stdout 표준 스트림을 통해 출력 장치를 다룬다.스트림(stream)C 프로그램은 파일이나 콘솔의 입출력을 직접 다루지 않고, 스트림(stream)이라는 것을 통해 다룬다.스트림(stream)이란 실제의 입력이나 출력이 표현된 데이터의 이상화된 흐름을 의미한다. 즉, 스트림은 운영체제에 의해 생성되는 가상의 연결 고리를 의미한다.C언어에서 파일과의 연결을 위한 스트림은 사용자가 직접 생성하고 소멸시켜야 한다. 하지만 콘솔 장치에 대..

Language/C 2026.06.07

[C] C언어 메모리 관리 - 구조, 스택 프레임, 동적 할당

메모리의 구조프로그램이 실행되기 위해서는 먼저 프로그램이 메모리에 로드(load)되어야 하며, 또한 프로그램에서 사용되는 변수들을 저장할 메모리도 필요하다. 따라서 컴퓨터의 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공하고 있습니다.프로그램이 운영체제로부터 할당받는 대표적인 메모리 공간은 다음과 같습니다.코드(code) 영역데이터(data) 영역스택(stack) 영역힙(heap) 영역코드(code) 영역메모리의 코드(code) 영역은 실행할 프로그램의 코드가 저장되는 영역으로 텍스트(code) 영역이라고도 부른다.CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리한다.데이터(data) 영역메모리의 데이터(data) 영역은 프로그램의 전역 변수와 정적(static) 변수가 저장되는 영..

Language/C 2026.06.07

[C] C언어 포인터와 배열 - 관계, 포인터 배열과 배열 포인터

포인터와 배열의 관계포인터와 배열은 매우 긴밀한 관계를 맺고 있으며, 어떤 부분에서는 서로를 대체할 수도 있다.배열의 이름은 그 값을 변경할 수 없는 상수라는 점을 제외하면 포인터와 같아서, 따라서 배열의 이름은 포인터 상수(constant pointer)다.포인터 상수(constant pointer)란 포인터 변수가 가리키고 있는 주소 값을 변경할 수 없는 포인터를 의미하며, 상수 포인터(pointer to constant)란 상수를 가르키는 포인터를 의미한다.int arr[3] = {10, 20, 30}; // 배열 선언int* ptr_arr = arr; // 포인터에 배열의 이름을 대입함 printf("배열의 이름을 이용하여 배열 요소에 접근 : %d %d %d\n", arr[0], ..

Language/C 2026.06.07

[C] C언어 포인터 - 개념, 연산, 인수 전달 방법, 이중/void/함수/Null 포인터

포인터란?C언어에서 포인터(pointer)란 메모리의 주소값을 저장하는 변수이며, 포인터 변수라고도 부른다.int형 변수가 정수를 저장하는 것처럼 포인터는 주소값을 저장한다.int n = 100; // 변수의 선언int *ptr = &n; // 포인터의 선언주소값의 이해해당 데이터가 저장된 메모리의 시작 주소가 데이터의 주소값을 의미한다. C언어에서는 이러한 주소값을 1바이트 크기의 메모리 공간으로 나누어 표현한다.예를 들어, int형 데이터는 4바이트의 크기를 가지지만, int형 데이터의 주소값은 시작 주소 1바이트만을 가리킨다. 포인터 연산자주소 연산자(&)주소 연산자는 변수의 이름 앞에 사용하여, 해당 변수의 주소값을 반환한다.'&'기호는 앰퍼샌드(ampersand)라고 읽으며, 번지 연산자라고..

Language/C 2026.06.07

[C] C언어 배열 - 1차원, 다차원

배열(array)이란?배열(array)은 같은 타입의 변수들로 이루어진 유한 집합으로 정의된다.배열을 구성하는 각각의 값을 배열 요소(element)라고 하며, 배열에서의 위치를 가리키는 숫자는 인덱스(index)라고 한다. C언어에서 인덱스는 언제나 0부터 시작하며, 0을 포함한 양의 정수만을 가질 수 있다.배열은 선언되는 형식에 따라 1차원 배열, 2차원 배열뿐만 아니라 그 이상의 다차원 배열로도 선언할 수 있지만 현실적으로 이해하기가 쉬운 2차원 배열까지가 많이 사용된다.C언어에서는 배열을 선언만 하고 초기화하지 않으면, 각 배열 요소에 아무런 의미를 가지지 않는 쓰레기값이 저장되어 있게 된다. 따라서 초기화되지 않은 배열은 사용하지 않도록 주의를 기울여야 한다. 1차원 배열1차원 배열은 가장 기본..

Language/C 2026.06.06