파일 I/O는 데이터를 영구 저장하고 불러오는 핵심 기능입니다. C 표준 라이브러리의 FILE* 스트림 기반 고수준 함수와 주요 패턴을 실무 중심으로 정리합니다. 파일 열기: fopen FILE *fopen(const char *pathname, const char *mode); 모드 문자열 상세 모드읽기쓰기생성잘림위치바이너리 rOXXX시작rb wXOOO시작wb aXOOX끝ab r+OOXX시작rb+, r+b w+OOOO시작wb+, w+b a+OOOX끝ab+, a+b 팁: 텍스트 모드에서 윈도우는 \n ↔ \r\n 변환, 바이
C의 입출력은 스트림(Stream) 추상화를 통해 파일, 콘솔, 네트워크 등을 통일된 방식으로 다룹니다. 표준 스트림과 주요 I/O 함수를 체계적으로 정리합니다. 표준 스트림 (자동 오픈) 스트림파일 포인터기본 장치용도 표준 입력stdin키보드데이터 읽기 표준 출력stdout화면일반 출력 표준 에러stderr화면에러/진단 메시지 stdout은 줄 버퍼링(개행 시 플러시), stderr는 무버퍼링(즉시 출력)됨. 문자 단위 입출력 함수원형설명 getcharint getchar(void)stdin에서 문자 1개 읽기, EOF(
typedef는 기존 타입에 새 이름을 부여하는 키워드입니다. 코드 가독성, 이식성, 추상화 수준을 높이는 핵심 도구입니다. 기본 문법 typedef 기존_타입 새_이름; 변수 선언 문법에서 변수 이름 위치에 새 타입 이름을 넣는다고 생각하면 쉽습니다. 기본 타입 별칭 typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; typedef unsigned long long uint64_t; typedef int
비트필드(Bit-field)는 구조체 멤버의 비트 폭을 명시하여 메모리를 비트 단위로 압축하는 기능입니다. 플래그 집합, 하드웨어 레지스터 매핑, 프로토콜 헤더 파싱에 유용합니다. 비트필드 문법 struct { 타입 멤버명 : 폭; }; 타입: int, signed int, unsigned int, _Bool (C99) 폭: 비트 수 (타입 폭 이하) 이름 없는 비트필드: unsigned int : 3; → 패딩용 폭 0: unsigned int : 0; → 다음 정렬 경계로 강제 이동 기본 예제: 플래그 압축 //
공용체(union)는 여러 멤버가 동일한 메모리 공간을 공유하는 타입입니다. 한 시점에 한 멤버만 유효하며, 크기는 가장 큰 멤버 크기로 결정됩니다. 공용체 정의와 크기 union Data { int i; // 4바이트 float f; // 4바이트 char str[20]; // 20바이트 → 전체 크기 20바이트 (정렬 고려 시 24 가능) } data; sizeof(union Data) == 20 (또는 정렬에 따라 24) 멤버 접근과 동작 원리 union Data d;
구조체(struct)는 서로 다른 타입의 변수들을 하나로 묶어 사용자 정의 타입을 만드는 핵심 기능입니다. 레코드 표현, 자료구조, 하드웨어 매핑 등에 필수적입니다. 구조체 정의와 선언 // 태그 있는 구조체 struct Point { int x; int y; }; // typedef로 별칭 생성 (권장) typedef struct { char name[50]; int age; double salary; } Employee; // 태그 + typedef 동시 typedef struct Nod
C에서 문자열은 널 종결 문자(\0)로 끝나는 char 배열입니다. 별도 문자열 타입이 없으며, 표준 라이브러리 함수들이 이 관례를 따릅니다. 문자열 표현과 메모리 // 1. 문자 배열로 초기화 (수정 가능, 스택) char str1[] = Hello; // 크기 6: H,e,l,l,o,\0 char str2[10] = Hi; // 크기 10, 나머지 0 // 2. 포인터로 문자열 리터럴 가리킴 (수정 불가, 읽기 전용 영역) char *str3 = Hello; // 문자열 리터럴 주소
포인터는 C의 핵심이자 가장 강력한 도구입니다. 메모리 주소를 직접 다루며 동적 할당, 배열 조작, 함수 콜백, 자료구조 구현의 기반이 됩니다. 기초부터 실전 패턴까지 체계적으로 정리합니다. 포인터 기초 메모리 주소와 포인터 모든 변수는 메모리 주소 가짐 &var: 변수 주소 구하기 (주소 연산자) 포인터 변수: 주소를 값으로 저장하는 변수 int var = 42; int *ptr = &var; // ptr은 var의 주소 저장 printf(var 값: %d\n, var); // 42 printf(v
배열은 동일 타입 요소의 연속된 메모리 집합입니다. C에서 배열의 선언, 초기화, 메모리 레이아웃, 함수 전달, 포인터와의 관계까지 실무 관점에서 정리합니다. 배열 선언 타입 이름[크기]; // 크기: 상수 표현식 (C99 이전) 타입 이름[상수표현식]; // C99: VLA(가변 길이 배열) 지원 - 런타임 크기 가능 예시 int scores[100]; // 고정 크기 100 double prices[50]; char name[32]; int n = 10; int vla[n];
스코프(Scope)는 식별자(변수, 함수 등)가 참조 가능한 프로그램 영역입니다. C는 블록 스코프, 파일 스코프, 함수 프로토타입 스코프를 가지며, 저장 클래스와 결합해 수명과 링키지를 결정합니다. 스코프의 4가지 종류 스코프 종류시작끝대상 블록 스코프선언 지점포함 블록 }지역 변수, 매개변수, 루프 변수(C99) 파일 스코프선언 지점번역 단위 끝전역 변수, 함수, 파일 내부 static 함수 프로토타입 스코프프로토타입 내프로토타입 끝함수 선언의 매개변수 이름 함수 스코프함수 본문함수 본문 끝레이블 (goto 대상) 변수
함수는 코드를 재사용 가능한 단위로 캡슐화합니다. C에서 함수의 구조, 선언/정의 분리, 매개변수 전달 방식, 재귀 호출까지 체계적으로 정리합니다. 함수 구조 반환타입 함수이름(매개변수목록) { // 함수 본문 변수 선언; 문장들; return 표현식; // void가 아닐 때 필수 } 구성 요소 반환 타입: int, double, void, 포인터, 구조체 등 함수 이름: 식별자 규칙 따름 매개변수 목록: 타입 이름, 타입 이름, ... 또는 void (인자 없음 명시) 함수 본문: 블록 { .
반복문은 코드 블록을 여러 번 실행하게 합니다. C는 3가지 기본 반복문과 루프 제어문을 제공합니다. 상황별 최적 선택과 패턴을 익히세요. 3대 반복문 비교 반복문조건 검사 시점최소 실행 횟수적합한 상황 while루프 진입 전 (사전 검사)0회반복 횟수 모름, 조건 기반 for루프 진입 전 (사전 검사)0회횟수 정해짐, 카운터 필요 do-while루프 실행 후 (사후 검사)1회최소 1회 실행 보장, 메뉴 등 while 문 while (조건) { // 본문 } 패턴: 센티널 제어 루프 int sum = 0, input
프로그램의 흐름을 제어하는 결정 구조를 다룹니다. C에서 참/거짓 판단 기준과 각 제어문의 문법, 중첩, 모범 사례를 정리합니다. C에서 참과 거짓 거짓(0): 정수 0, 널 포인터 NULL, \0 참(참): 0이 아닌 모든 값 (음수 포함), 유효 포인터 관계/논리 연산 결과: 참=1, 거짓=0 (int 타입) <stdbool.h> (C99): bool, true(1), false(0) 매크로 제공 if 문 기본 형태 if (조건) 문장; // 단일 문장 (중괄호 생략 가능) if
C 연산자는 피연산자에 연산을 수행하는 기호입니다. 6대 분류와 우선순위, 결합 법칙을 표로 정리하고 실수하기 쉬운 포인트를 짚습니다. 1. 산술 연산자 연산자이름예시 (A=10, B=3)결과 +덧셈A + B13 -뺄셈A - B7 *곱셈A * B30 /나눗셈A / B3 (정수 나눗셈: 버림) %나머지 (모듈로)A % B1 ++전위/후위 증가++A / A++11 / 10(후 값 11) --전위/후위 감소--A / A--9 / 10(후 값 9) 주의: 정수 나눗셈은 0 방향으로 절삭. 음수 나머지 부호는 피제수(왼쪽) 따름 (C
저장 클래스는 변수/함수의 스코프(가시 범위), 수명(생존 기간), 링키지(연결 방식), 메모리 위치를 결정합니다. 5가지 저장 클래스 지정자를 마스터하세요. 저장 클래스 비교표 지정자적용 위치스코프수명링키지초기값메모리 auto블록 내부블록블록 진입~종료없음불확정스택 register블록 내부블록블록 진입~종료없음불확정레지스터/스택 static (지역)블록 내부블록프로그램 전체없음0/NULL데이터/BSS static (전역)파일 범위파일프로그램 전체내부0/NULL데이터/BSS extern (전역)파일 범위파일/전역프로그램 전체외부
상수(Constant)는 프로그램 실행 중 값이 변경되지 않는 고정값입니다. 리터럴(Literal)은 소스 코드에 직접 쓴 상수값이고, 심볼릭 상수는 이름 붙은 상수입니다. 정수 리터럴 진법접두사예시비고 10진수(없음)212, -10기본 8진수00213, 0770~7만 사용 16진수0x / 0X0xFeeL, 0XABC대소문자 무관 접미사 (Suffix) U / u: 부호 없는 (unsigned) L / l: long (소문자 l은 1과 혼동되니 대문자 권장) LL / ll: long long (C99) 조합 가능: 123U
변수는 메모리 공간에 붙이는 이름입니다. 타입, 저장 클래스, 스코프, 링키지, 수명 등 변수의 모든 속성을 체계적으로 정리합니다. 변수 정의 vs 선언 구분설명메모리 할당예시 정의(Definition)저장 공간 생성, 초기화 가능예int x = 10; 선언(Declaration)이름과 타입만 알림, extern 사용아니오extern int x; 한 프로그램에서 정의는 한 번만 가능, 선언은 여러 번 가능. 기본 변수 타입 타입크기용도서식 char1바이트문자/작은 정수%c %hhd int4바이트 (일반)일반 정수%d flo
C의 타입 시스템은 변수의 메모리 크기, 값의 범위, 비트 해석 방식을 결정합니다. 표준 타입부터 플랫폼 의존적 크기까지 체계적으로 정리합니다. 타입 분류 체계 분류포함 타입설명 기본 타입정수형, 실수형산술 연산 가능, 하드웨어 직접 매핑 열거형enum명명된 정수 상수 집합 void 타입void값 없음, 미완성 타입 파생 타입포인터, 배열, 구조체, 공용체, 함수기본 타입으로부터 합성 정수 타입 상세 크기와 범위는 구현 정의(Implementation-defined)이며, <limits.h> 매크로로 확인 가능.
C 프로그램의 최소 구성 단위인 토큰부터 시작해 문장을 이루는 핵심 문법 규칙을 정리합니다. 토큰 (Token) 컴파일러가 인식하는 가장 작은 단위. 5가지 종류: 키워드: 예약어 (int, return, if 등) 식별자: 변수/함수/타입 등 사용자 정의 이름 상수(리터럴): 숫자, 문자, 문자열 상수 문자열 리터럴: Hello 기호/연산자: +, -, *, /, ;, {}, () 등 토큰 분리 예시 printf(Hello, World!\n); → printf ( Hello, World!\n ) ; (5개 토큰) 세미콜론
C 프로그램의 기본 구성 요소를 Hello World 예제로 분석하고, 소스 코드에서 실행 파일까지의 컴파일 과정을 단계별로 설명합니다. C 프로그램의 5가지 구성 요소 전처리기 명령: #include, #define 등 컴파일 전 처리 함수: 코드의 실행 단위, 최소 main() 필수 변수: 데이터 저장 공간, 타입과 이름 필요 문장 & 표현식: 연산, 제어 흐름, 함수 호출 등 주석: /* ... */ (블록), // ... (줄) - 컴파일러 무시 Hello World 상세 분석 #include <stdio.h&g
C 언어