2025. 1. 21. 15:55ㆍ프로그래밍 언어/C
C 언어의 데이터 타입은 크게 기본 데이터 타입(Primitive Types)과 확장/파생 데이터 타입으로 나뉩니다. 이 중 핵심 기본 타입으로 다음 4가지를 꼽을 수 있습니다:
핵심 기본 타입 (Core Primitive Types)
C 언어에서 가장 기본적이고 중요한 데이터 타입입니다:
- char: 문자와 작은 정수 표현 (1 byte)
- 컴파일러에 따라 signed 또는 unsigned가 기본값으로 설정됩니다. 이를 명시적으로 선언하는 것이 좋습니다.
- int: 일반적인 정수 표현 (4 bytes)
- float: 단정밀도 실수 표현 (4 bytes)
- double: 배정밀도 실수 표현 (8 bytes)
이 4가지만으로 대부분의 프로그램을 작성할 수 있으며, 나머지 타입은 특정 용도나 상황에서 사용됩니다.
1. 기본 데이터 타입 (Primitive Data Types)
C 언어에서 제공하는 가장 기본적인 데이터 타입입니다.
1.1. 정수형 (Integer Types)
정수를 저장하기 위한 타입입니다. 데이터 타입의 크기와 범위는 플랫폼과 컴파일러에 따라 달라질 수 있습니다. 현재는 64비트 시스템이 널리 사용되므로 이에 대한 참고 정보를 추가로 제공합니다.
타입 | 크기 (32비트 시스템 기준) | 크기 (64비트 시스템 기준) | 범위 | 설명 |
char | 1 byte | 1 byte | -128 ~ 127 (signed) 또는 0 ~ 255 (unsigned) | 문자 저장 또는 작은 정수형 |
unsigned char | 1 byte | 1 byte | 0 ~ 255 | 음수가 없는 문자형 |
short | 2 bytes | 2 bytes | -32,768 ~ 32,767 | 작은 정수 저장 |
unsigned short | 2 bytes | 2 bytes | 0 ~ 65,535 | 음수가 없는 작은 정수형 |
int | 4 bytes | 4 bytes | -2,147,483,648 ~ 2,147,483,647 | 기본 정수형 |
unsigned int | 4 bytes | 4 bytes | 0 ~ 4,294,967,295 | 음수가 없는 정수형 |
long | 4 bytes (32비트 시스템) | 8 bytes (64비트 시스템) 또는 일부 플랫폼에서 4 bytes | -2,147,483,648 ~ 2,147,483,647 (32비트) 또는 플랫폼 의존 (64비트) | 긴 정수형 |
unsigned long | 4 bytes | 8 bytes 또는 일부 플랫폼에서 4 bytes | 0 ~ 4,294,967,295 (32비트) 또는 플랫폼 의존 (64비트) | 음수가 없는 긴 정수형 |
long long | 8 bytes | 8 bytes | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 매우 긴 정수형 |
unsigned long long | 8 bytes | 8 bytes | 0 ~ 18,446,744,073,709,551,615 | 음수가 없는 매우 긴 정수형 |
참고: long과 long double의 크기와 범위는 플랫폼과 컴파일러에 따라 다를 수 있습니다. 예를 들어, 64비트 Linux 시스템에서는 long이 8 bytes인 경우가 많지만, 일부 64비트 Windows 환경에서는 여전히 4 bytes로 유지됩니다.
1.2. 부동소수점형 (Floating-Point Types)
실수값을 저장하기 위한 타입입니다.
타입 | 크기 (32비트 시스템 기준) | 크기 (64비트 시스템 기준) | 정밀도 (소수점 자리) | 설명 |
float | 4 bytes | 4 bytes | 약 6~7자리 | 단정밀도 실수형, 32비트 IEEE 754 표준을 따름 |
double | 8 bytes | 8 bytes | 약 15~16자리 | 배정밀도 실수형, 64비트 IEEE 754 표준을 따름 |
long double | 16 bytes | 플랫폼에 따라 다르며, 일부 시스템에서는 10 bytes 또는 16 bytes | 플랫폼 의존 | 확장 정밀도 실수형 |
1.3. 기타 타입 (Other Types)
타입 | 설명 |
void | 반환 값이 없음을 의미하는 타입 |
_Bool | true(1) 또는 false(0)을 저장하는 논리형 (C99 표준) |
bool | <stdbool.h> 헤더 파일을 포함하여 사용할 수 있는 논리형 |
size_t | 메모리 크기를 표현하기 위한 정수형 (unsigned) |
ptrdiff_t | 두 포인터의 차이를 나타내는 정수형 |
intptr_t | 포인터를 정수로 저장할 때 사용하는 정수형 |
2. 파생 데이터 타입 (Derived Data Types)
기본 타입을 기반으로 새로 정의되는 타입입니다.
타입 | 설명 |
배열 (Array) | 동일 타입 데이터를 연속으로 저장 |
포인터 (Pointer) | 주소값을 저장하는 타입 |
구조체 (Struct) | 서로 다른 타입을 묶는 사용자 정의 타입 |
공용체 (Union) | 하나의 메모리 공간을 공유하는 타입. 가장 큰 멤버의 크기만큼 메모리를 할당하며, 한 번에 하나의 멤버만 저장 가능 |
열거형 (Enum) | 상수값의 집합을 정의하는 타입 |
함수 (Function) | 함수의 반환 타입과 매개변수 타입 |
3. 사용자 정의 데이터 타입 (User-Defined Data Types)
사용자가 새롭게 정의할 수 있는 타입입니다.
3.1. typedef
기존의 타입에 새 이름을 부여합니다.
typedef unsigned int uint;
uint a = 10; // unsigned int와 동일
3.2. enum
열거형 상수를 정의합니다.
enum Color { RED, GREEN, BLUE };
enum Color myColor = RED;
3.3. struct
구조체를 정의합니다.
struct Point {
int x;
int y;
};
struct Point p1 = {10, 20};
3.4. union
공용체를 정의합니다. 공용체는 모든 멤버가 동일한 메모리 공간을 공유하며, 한 번에 하나의 멤버만 활성화됩니다.
union Data {
int i;
float f;
};
union Data d;
d.i = 10;
4. 타입 한정자 (Type Qualifiers)
변수의 속성을 제한하거나 확장할 때 사용합니다.
한정자 | 설명 |
const | 값을 변경할 수 없음을 나타냄 |
volatile | 최적화를 방지하여 항상 메모리를 읽도록 강제 |
restrict | 포인터 접근 최적화를 돕기 위한 제한 |
_Atomic | 원자적 연산을 지원 (C11 표준 도입) |
왜 핵심 타입이 4개로 요약될까?
C 언어의 다양한 데이터 타입 중에서 char, int, float, double만을 핵심으로 간주하는 이유는 다음과 같습니다:
- 단순성: 이 4개는 가장 기본적이고 자주 사용되며, 다른 모든 타입의 기반이 됩니다.
- 확장형 제외: short, long, unsigned 등은 기본 타입의 확장형으로 간주되며, 핵심적인 역할보다는 특수한 상황에서 사용됩니다.
- 특수 타입 제외: void와 같은 타입은 데이터를 저장하지 않으므로, 기본 타입의 정의에서 제외됩니다.
'프로그래밍 언어 > C' 카테고리의 다른 글
C언어 초급 - 2장: C 프로그램의 구조 (2.1 C 프로그램의 기본 구조) (0) | 2025.02.23 |
---|---|
C언어 초급 - 1장: C 언어 소개 및 개발 환경 설정 (1.2 개발 환경 설정) (0) | 2025.02.23 |
C언어 초급 - 1장: C 언어 소개 및 개발 환경 설정 (1.1 C 언어란 무엇인가?) (0) | 2025.02.23 |
C언어 매크로 사용법 (2/2. 함수 매크로) (0) | 2024.08.03 |
C언어 매크로 사용법 (1/2. 단순 매크로) (0) | 2024.08.03 |