C 함수
함수
- 함수는 parameter, return, operation으로 구성됨 (개념은 python과 차이 없음)
- parameter로 전달되는 값은 argument
- parameter와 return은 있을 수도 없을 수도 있음
- 함수 또한 사용되기 전에 선언되어야 함.
형식
- return되는 type을 function_name 앞에 명시(
void
는 return되는 값이나 parameter가 없을 때 사용) -
parameter들도 각각 type을 명시해줘야 함
- tip) Argument와 parameter 구분해 이해해야한다.
- parameter는 함수 밖에서 전달 받을 어떤 변수의 자리를 만들어 놓은 것.
- operation은 parameter들로 표현되어 수행될 프로그램이 작성됨. 이 때 operation 내에 사용된 변수는 지역변수로
- argument는 함수 밖에서 함수에게 전달되어 parameter를 대신해 operation이 수행됨
- 만약 정의 된 parameter와 다른 type의 argument를 대입하면 parameter의 type으로 argument의 type이 implicit conversion됨 *따로 빼서 정리하는 것도 좋을 것 같음
표준 라이브러리 함수
#include <stdio.h>
처럼#include
로 미리 작성된 프로그램을 불러옴.h
,.c
,.txt
모두 사용할 수 있고#include
로 불러온 위치에 해당 내용이 실행됨< >
와" "
로 불러올 수 있는데,< >
는 표준 라이브러리에서 파일을 찾고," "
는 먼저 작업 폴더에서 찾고 없다면 표준 라이브러리에서 찾음
메모리의 영역
- 전역변수와 공유 되는 변수를 저장하고 프로그램 전체에 영향을 끼치는 static 메모리
- 함수나 block내에 선언된 지역 변수를 저장하는 stack 영역. stack에 저장된 변수는 해당 block이 끝나면 사라짐
함수와 스택
- C에서 지역 변수를 저장를 메모리에 stack으로 저장한다
- 새로운 함수가 call되거나 새로운 블록이 시작되면 새로운 stack이 생성되고 기존의 stack들은 invisible stack, 새로운 stack이 active stack이 됨.
- 해당 함수나 블록이 끝날 때 까지 Active stack에 존재하는 변수를 우선 참조함
Static memory
- 프로그램을 실행하면 메모리의 일부를 할당하고 일부는 코드, 일부는 stack, 일부는 static memory의 영역으로
- 전역변수는 static memory에 저장되고 항상 참조됨
- 그러나 전역 변수와 같은 변수가 함수에서 정의되면 전역 변수는 가려진다.
- 컴파일러가 변수를 찾을 때 가장 가까운 지역 변수부터 찾는다.
- 위의 예에서
{ }
블록이 생성 될 때 마다 새로운 stack이 생기고 끝날 때 마다 그 블록 안에서 생성된 변수들은 사라짐 - line 1에서 생성된 변수 a는 이후 각 block에서 생성된 a의 영향을 받지 않고,
printf
로 출력되는 값은 가장 가까운 block의 a값을 출력함