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

노트 / C 언어

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

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

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

값에 의한 전달

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

변수의 수명

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

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

재귀를 피하는 이유

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