그라운드 임베디드 EN 유튜브 구독

노트 / C 언어

함수와 스코프: 값 복사, 수명, 재귀

함수 인자는 복사되어 전달됩니다. 지역 변수와 전역 변수의 수명, 그리고 MCU에서 재귀를 피하는 이유.

GROUND EMBEDDED · 정리 노트C 언어 04함수와 스코프종류어디에언제까지지역 변수스택함수가 끝나면 사라짐전역 변수.data / .bss프로그램 끝까지

값에 의한 전달

main의 x10원본함수의 a10 → 20복사본만 바뀜main의 x10그대로
함수는 인자의 복사본을 받습니다. 복사본을 바꿔도 원본은 그대로입니다.

C 함수는 인자의 복사본을 받습니다. 함수 안에서 인자를 바꿔도 호출한 쪽 변수는 그대로입니다. 바깥 값을 바꾸고 싶다면 주소를 넘깁니다. 이것이 포인터를 배워야 하는 첫 번째 이유입니다.

변수의 수명

.data / .bss전역, static · 끝까지 유지스택지역 변수 · 함수가 끝나면 사라짐
변수가 놓이는 곳. 지역 변수만 함수가 끝나면 사라집니다.
종류 어디에 언제까지
지역 변수 스택 함수가 끝나면 사라짐
전역 변수 .data / .bss 프로그램 끝까지
static 지역 변수 .data / .bss 프로그램 끝까지, 이름은 함수 안에서만

지역 변수의 주소를 반환하면 함수가 끝난 뒤 그 메모리는 다른 함수가 덮어씁니다. 컴파일은 되지만 가장 찾기 어려운 버그 중 하나입니다.

재귀를 피하는 이유

함수를 부를 때마다 스택이 쌓입니다. RAM이 수 KB인 MCU에서 깊이를 예측할 수 없는 재귀는 스택 넘침으로 이어지고, 증상은 엉뚱한 변수 값이나 하드폴트로 나타납니다. 임베디드 코딩 규칙 대부분이 재귀를 금지합니다.

3D 실험실에서 직접 돌려 보기값을 바꾸며 이 노트의 원리를 확인합니다→영상으로 이어 보기공부법과 진로 시리즈 15편2025 임베디드 프로그래밍 공부 순서 | 공부 방법 | 로드맵PROJECT COURSEC 문법을 실제 펌웨어 코드로 써 보고 싶다면밸런싱 로봇 하나를 요구사항, 회로와 PCB, 펌웨어, 앱까지 실무 순서대로 만드는 강의입니다. 10파트 165강.강의 살펴보기 →FREE PDF무료 전자책 3권 받기이 주제를 한 권으로 이어서 읽고 싶다면. BLDC 모터 제어, 직렬통신, 센서를 책 분량으로 묶었습니다. 이메일만 남기면 바로 받습니다.무료로 받기 →