C언어 기초 (1)

myblack·2025년 5월 2일

임베디드 STM32

목록 보기
1/11

플로우차트(Flowchart)

프로그램의 논리적인 흐름을 도형과 화살표를 이용해 도식화한 것
– 사람이 프로그램의 흐름을 더 쉽게 이해할 수 있도록 돕는 시각적 도구
복잡한 C 프로그램의 논리 구조를 이해하고 설계할 때 사용

1.시작과 끝
2.준비
3.조건
4.처리/행동
5.입출력

예시코드

  • ✅ 코드 설명:
    scanf를 통해 정수를 입력
    if (number % 2 == 0) 조건문을 통해 짝수인지 확인
    조건에 따라 각각 "Even Number" 또는 "Odd Number"를 출력
#include <stdio.h>

int main() {
    int number;

    // 숫자 입력
    printf("숫자를 입력하세요: ");
    scanf("%d", &number);

    // 짝수/홀수 판단
    if (number % 2 == 0) {
        printf("Even Number\n");
    } else {
        printf("Odd Number\n");
    }

    return 0;
}

기초 용어

주석 (Comment)
코드에 대한 설명. 컴파일되지 않음.
// 한 줄 주석, / 여러 줄 주석 /

문장 (Statement)
하나의 작업을 수행하는 코드 줄. ;으로 끝남 a = 10;

자료형 (Data type)

자료형(data type)이란 저장되는 데이터의 종류에 따른 형태로, 저장되는 값의 종류와 범위에 따라 다르게 표현됨

상수 (Constant)
값이 변하지 않는 데이터
const int max = 100;

변수 (Variable)
바뀔수 있음, 데이터를 저장하는 이름 붙은 공간
int age = 20;

자료형 크기 확인 sizeof()
C에서는 sizeof() 연산자를 사용하면 자료형의 크기를 확인할수 있음

printf("int: %lu bytes\n", sizeof(int));
printf("float: %lu bytes\n", sizeof(float));

형 변환(Type Casting)
데이터형을 명시적으로 바꾸는 것

int x = 5;
float y = (float)x / 2;  // 정수를 실수로 변환

오버플로우(overflow)

오버플로우(overflow)란 해당 타입이 표현할 수 있는 최대 범위보다 큰 수를 저장할 때 발생하는 현상

오버플로우가 발생하면 최상위 비트(MSB)를 벗어난 데이터가 인접 비트를 덮어쓰므로, 잘못된 결과를 얻을 수 있음.

반대의 경우로 언더플로우(underflow)가 있는데 이는 해당 타입이 표현할 수 있는 최소 범위보다 작은 수를 저장할 때 발생하는 현상을 가리킴

정수형 오버플로우
정수형 변수는 고정된 크기(예: int는 4바이트)만큼만 값을 표현 가능
최대값을 초과하면 가장 작은 값으로 순환됨 (이진수 표현 때문)

#include <stdio.h>
#include <limits.h>

int main() {
    int x = INT_MAX;  // 32비트 기준: 2147483647
    x = x + 1;
    printf("%d\n", x);  // 출력: -2147483648 (오버플로우 발생)
    return 0;
}

부동소수점 오버플로우

#include <stdio.h>
#include <float.h>

int main() {
    float f = FLT_MAX * 1000.0f;
    printf("%f\n", f);  // 출력: inf (무한대)
    return 0;
}

언더플로우 (Underflow)
0에 매우 가까운 작은 수가 0으로 사라질 때 발생

부동소수점 언더플로우
float는 너무 작은 수는 정확히 표현 불가
부동소수점의 정밀도 한계로 0으로 반올림됨

#include <stdio.h>
#include <float.h>

int main() {
    float f = 1.0e-46f;  // float의 최소값보다 작음
    printf("%e\n", f);   // 출력: 0.000000e+00
    return 0;
}

기수법 (Number systems)

기수법은 숫자를 표현하는 방법으로, 몇을 밑으로 하여 자릿수를 구성하느냐에 따라 구분

기수법밑 (Base)사용 숫자예시
2진수 (Binary)20, 10b1010 → 10 (10진수)
10진수 (Decimal)100~9123, 2024
16진수 (Hexadecimal)1609, AF0x1A → 26 (10진수)

C에서 표기 방법
출력 방법 (printf)

  • 10진수 (%d)
    그냥 숫자 그대로

  • 2진수
    직접 표기는 X (bit 연산 등으로 처리)
    사용자 정의 함수 필요

  • 8진수 (%o)
    숫자 앞에 0 붙임

  • 16진수 (%x 또는 %X)
    숫자 앞에 0x 또는 0X

진수 간 변환 예시

10진수2진수16진수
101010A
151111F
26110101A
25511111111FF

컴퓨터 메모리

컴퓨터 메모리는 데이터와 명령어를 저장하는 공간
주로 RAM(주기억장치)를 의미하며, 데이터를 임시로 보관하여 CPU가 빠르게 접근할 수 있도록 함

메모리 단위

  • 비트(Bit) : 가장 작은 정보 단위
    0 또는 1 중 하나의 값을 표현

  • 바이트(Byte) : 1바이트 = 8비트
    한 문자를 저장하는 기본 단위
    8개 비트, 256개 수 표현

단위크기설명
Bit (b)10 또는 1
Byte (B)8 bits문자 1개, 기본 저장 단위
KB1024 B텍스트 문서
MB1024 KB이미지, 소프트웨어
GB1024 MB동영상, OS
TB1024 GB대용량 저장
PB1024 TB데이터 센터급

C언어 메모리 구조

포인터를 통해 스택/힙 접근을 하게 되므로 구조 이해가 중요
메모리 구조 이해는 메모리 누수, 버퍼 오버플로우, 세그먼트 오류(segfault) 등을 막는 데 핵심적

  • 코드 영역 (Text / Code Segment)
    프로그램의 기계어(명령어)가 저장됨
    main(), printf() 같은 함수 코드가 이 영역에 위치
    일반적으로 읽기 전용 (수정 불가)
void hello() {
    printf("Hi!\n");  // 이 함수 자체는 코드 영역에 저장됨
}
  • 데이터 영역 (Data Segment)
    전역변수와 정적 변수가 저장되는 공간으로, 두 부분으로 나뉩니다:

ⓐ 초기화된 데이터 영역
초기값이 있는 전역/정적 변수

int global_var = 10;   // 여기 저장됨

ⓑ 미초기화 데이터 영역 (BSS Segment)
초기값 없는 전역/정적 변수

static int count;      // 0으로 초기화되어 BSS에 저장
  • 힙 영역 (Heap)
    동적 메모리 할당 영역
    malloc(), calloc(), realloc() 등을 통해 메모리 할당
    사용자가 수동으로 free()로 해제해야 함
    사용자에 의해 크기/수명 결정
int* p = malloc(sizeof(int) * 10);  // 10개 int 공간 동적 할당
// 메모리 누수(leak) 발생 가능성 존재
  • 스택 영역 (Stack)
    지역 변수, 함수 호출 정보가 저장됨
    함수가 호출되면 스택 프레임이 생기고, 끝나면 사라짐
    자동으로 관리되며 매우 빠름
void func() {
    int local = 5;  // 스택에 저장
}
// 스택 오버플로우(Stack Overflow)는 재귀 호출 시 발생 가능

요약

영역저장 내용관리 방식생성 시기
코드 영역함수 코드, 명령어자동프로그램 시작 시
데이터 영역전역/정적 변수 (초기화 여부에 따라)자동프로그램 시작 시
힙 영역동적 할당 변수 (malloc)수동(free)런타임 중
스택 영역지역 변수, 매개변수, 함수 호출 정보자동함수 호출 시









Ref
Chatgpt
플로우차트
https://www.genspark.ai/spark/c%EC%96%B8%EC%96%B4%EB%A1%9C-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-flow-chart-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EC%9E%91%EC%84%B1-%EB%B0%A9%EB%B2%95/2914305d-9a69-4b6b-a8ca-ae3a705620f2
데이터형
https://ittrue.tistory.com/51
메모리
https://thenaeul.wordpress.com/2020/11/08/c%EC%96%B8%EC%96%B4-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%81%EC%97%AD/

profile
기록과 분석, 이해

0개의 댓글