코드를 느껴바라

[C/C++] C언어 자료형 본문

개발/임베디드(Embedded)

[C/C++] C언어 자료형

feelTheCode 2025. 12. 24. 14:51

1. float와 double의 정밀도

자료형 유효 정밀도 특징
float 약 7~10자리 단정밀도 실수, 메모리 4바이트
double 약 15~20자리 배정밀도 실수, 메모리 8바이트

float는 메모리를 적게 사용하지만 정밀도가 낮고,
double은 더 많은 메모리를 사용하지만 훨씬 높은 정밀도를 가진다.
정확한 수치 계산이 필요한 경우 double을 사용하는 것이 기본 원칙이다.


2. C에서의 bool 타입

C 언어에는 원래 논리 자료형이 존재하지 않는다.
따라서 stdbool.h 헤더를 포함해야 bool, true, false를 사용할 수 있다.

#include <stdbool.h>

bool flag = true;

내부적으로는 boolunsigned char로 구현되어 있다.


3. 선언과 정의의 차이

구분 의미
선언 (Declaration) “이런 게 존재한다”는 정보만 컴파일러에게 알림
정의 (Definition) 실제 메모리 공간을 생성
extern int x;   // 선언
int x = 10;     // 정의

선언은 여러 번 가능하지만, 정의는 한 번만 가능하다.


4. 기본형과 파생형

구분 예시
기본형 int, char, float, double
파생형 배열, 포인터, 구조체, 공용체, 함수
int a;          // 기본형
int* p;         // 파생형
int arr[10];    // 파생형

5. typedef

typedef자료형의 별칭을 정의하는 문법이다.

typedef unsigned int uint;
uint a = 10;

특히 함수 포인터를 간단하게 만들 때 많이 사용된다.

typedef int (*FuncPtr)(int, int);
FuncPtr f;

6. 묵시적 형변환과 명시적 형변환

묵시적 형변환 (Implicit Casting)

컴파일러가 자동으로 타입을 변환한다.

int a = 10;
double b = a;   // int → double 자동 변환

명시적 형변환 (Explicit Casting)

프로그래머가 강제로 변환한다.

double x = 3.14;
int y = (int)x;   // 소수점 이하 버림

7. union (공용체)

union모든 멤버가 같은 메모리 공간을 공유하는 자료형이다.

union Data {
    int i;
    float f;
    char c;
};

특징:

  • 크기는 가장 큰 멤버 기준
  • 한 번에 하나의 값만 의미 있음
  • 메모리 절약 및 하드웨어 레지스터 다룰 때 자주 사용

8. 리터럴 상수와 심볼릭 상수

리터럴 상수

코드에 직접 적는 값.

10
3.14
'a'
"Hello"

심볼릭 상수

이름을 붙인 상수.

#define PI 3.141592
const int MAX = 100;

가독성과 유지보수를 위해 심볼릭 상수를 사용하는 것이 원칙이다.


마무리

이 개념들은 C 언어의 메모리 모델, 타입 시스템, 컴파일 구조를 이해하는 핵심 기반이다.
이걸 정확히 이해하면 이후 포인터, 구조체, 동적 할당, 링킹 에러까지 자연스럽게 이어진다.

반응형