C 함수

1 minute read

함수

  • 함수는 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값을 출력함