728x90
함수
- 함수는 parameter, return, operation으로 구성됨 개념은python과차이없음
- parameter로 전달되는 값은 argument
- parameter와 return은 있을 수도 없을 수도 있음
- 함수 또한 사용되기 전에 선언되어야 함.
형식
- return되는 type을 function_name 앞에 명시(
void
는 return되는 값이나 parameter가 없을 때 사용) - parameter들도 각각 type을 명시해줘야 함
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
void function_nameintparameter1,floatparameter2,... { operations; } - 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에 저장되고 항상 참조됨
- 그러나 전역 변수와 같은 변수가 함수에서 정의되면 전역 변수는 가려진다.
- 컴파일러가 변수를 찾을 때 가장 가까운 지역 변수부터 찾는다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
int a = 1; | |
{ | |
int a = 2; | |
{ | |
int a = 3; | |
printf";//3 | |
{ | |
printf";//3 | |
} | |
} | |
printf"; //2 | |
} | |
printf"; //1 |
- 위의 예에서
{ }
블록이 생성 될 때 마다 새로운 stack이 생기고 끝날 때 마다 그 블록 안에서 생성된 변수들은 사라짐 - line 1에서 생성된 변수 a는 이후 각 block에서 생성된 a의 영향을 받지 않고,
printf
로 출력되는 값은 가장 가까운 block의 a값을 출력함
'프로그래밍 언어 > C' 카테고리의 다른 글
[C++] pair class 사용법 0 | 2022.09.18 |
---|---|
C 연산자 0 | 2022.07.30 |
printf와 scanf 0 | 2022.07.30 |
C 언어에서 수 체계와 변수 0 | 2022.07.30 |