null
vuild_
Nodes
Flows
Hubs
Login
MENU
GO
Notifications
Login
⌂
C언어 실전 코드 패턴
Structure
struct
•
구조체 배열 선언과 초기화
•
구조체 포인터 접근하는 법
•
Swap 함수를 구조체에 적용하기
•
연결리스트 삽입·삭제·정렬
memory-pointer
•
malloc·free 사용 패턴
•
포인터로 Swap 구현하기
•
배열 복사 — memcpy vs 루프 비교
string-impl
•
strlen을 직접 짜면
•
strcpy를 직접 짜면
•
strcat·strcmp 구현과 안전한 대안
const-module
•
const 올바른 사용법
•
.h 파일과 .c 파일 역할 구분
•
파일 입출력 패턴
practical-tricks
•
가변길이 배열 파라미터 처리
•
!! 이중 부정 연산자
•
Windows 소켓 에러 모음
•
미니 프로젝트 — 영타 연습기 만들기
Flow Structure
const 올바른 사용법
12 / 17
파일 입출력 패턴
☆ Star
↗ Full
.h 파일과 .c 파일 역할 구분
#c
#header
#source
#module
#embedded
@devpc
|
2026-05-04 12:40:01
|
GET /api/v1/flows/25/nodes/452?fv=1&nv=1
Context:
Flow v1
→
Node v1
0
Views
1
Calls
# .h 파일과 .c 파일 역할 구분 ## 왜 나누는가 C 소스 파일이 하나일 때는 나눌 이유가 없다. 파일이 여럿이 되면 "어떤 함수가 어디 있는가"를 서로에게 알려야 한다. `.h`(헤더)가 그 역할을 한다. --- ## 헤더 파일의 역할 헤더 파일은 **선언(declaration)** 만 담는다. 구현은 `.c` 파일에 있다. ```c /* sensor.h — 선언만 */ #ifndef SENSOR_H #define SENSOR_H #include <stdint.h> typedef struct { uint8_t id; float value; } SensorData; /* 함수 선언 (프로토타입) */ int sensor_init(uint8_t id); int sensor_read(uint8_t id, SensorData *out); void sensor_reset(void); #endif /* SENSOR_H */ ``` --- ## 소스 파일의 역할 ```c /* sensor.c — 구현 */ #include "sensor.h" #include <string.h> static SensorData sensors[8]; /* 외부에서 접근 불가 */ int sensor_init(uint8_t id) { if (id >= 8) return -1; sensors[id].id = id; sensors[id].value = 0.0f; return 0; } int sensor_read(uint8_t id, SensorData *out) { if (id >= 8 || !out) return -1; *out = sensors[id]; return 0; } void sensor_reset(void) { memset(sensors, 0, sizeof(sensors)); } ``` `static SensorData sensors[8]`는 이 `.c` 파일 안에서만 보인다. 내부 상태를 숨기는 C 언어식 캡슐화다. --- ## Include Guard 헤더가 여러 번 `#include`되면 타입·매크로 재정의 에러가 난다. 이를 막는 것이 Include Guard다. ```c /* 방법 1: ifndef guard (전통적) */ #ifndef MY_MODULE_H #define MY_MODULE_H /* ... 내용 ... */ #endif /* 방법 2: #pragma once (현대적, 대부분 컴파일러 지원) */ #pragma once /* ... 내용 ... */ ``` `#pragma once`가 더 간결하지만 MISRA C 프로젝트 등 엄격한 환경에서는 `ifndef` guard를 요구하기도 한다. --- ## extern: 다른 파일의 변수 선언 ```c /* config.c */ int g_baud_rate = 115200; /* config.h */ extern int g_baud_rate; /* 다른 파일에 정의됨을 선언 */ /* main.c */ #include "config.h" printf("Baud: %d\n", g_baud_rate); ``` 전역 변수를 여러 파일에서 공유할 때 `extern`으로 선언한다. 단, 전역 변수 공유는 최소화하는 것이 좋다. --- ## 파일 구성 예시 ``` project/ src/ main.c sensor.c uart.c include/ sensor.h uart.h ``` 헤더를 별도 `include/` 폴더에 두는 방식이 일반적이다. MCU 프로젝트(STM32, Aurix)에서도 동일한 구조를 따른다.
const 올바른 사용법
파일 입출력 패턴
// COMMENTS
Newest First
ON THIS PAGE
No content selected.