위 코드에서 보면 myfunc라는 함수는 int자료형 자료 2개를 각각 num1과 num2라는 이름으로 넘겨 받아 두개를 더해서 반환한다.
int c= myfunc(a, b);
라는 코드에서 myfunc함수를 호출하며 a,b를 파라미터로 넘겨주고 있다.
그럼 myfunc에선 num1에 a의 값을, num2에 b의 값을 넘겨받아 두 값을 더해 그 더한 값을 반환한다.
반환한 값은 c에 들어 간다.
결과적으로 c에는 5가 들어가게 된다.
함수는 선언과 구현을 따로 분리 할 수도 있다.
함수의 선언은 그 함수를 호출하는 코드보다 위에 있어야 한다. 그렇기 때문에 위처럼 함수의 선언만 해놓고 실제 구현은 아래에다가 해놓는 경우가 많다.
int myfunc(int num1, int num2);는 myfunc라는 함수를 만들겠다고 선언만 해 놓은 것이다.
밑에
int myfunc(int num1, int num2){
return num1+ num2;
}
라는 구문이 없으면 컴파일러는 함수의 구현이 없기 때문에 에러를 띄울 것이다.
2. 지역변수와 전역변수
지역변수란 함수 내에서 선언해 놓은 변수이며 그 함수 안에서만 유효하다.
전역변수란 함수 밖에서 선언한 변수이며 그 파일 전체에서 유효하다.
같은 이름으로 지역변수와 전역변수가 있을경우 지역변수를 우선으로 한다.
#include <stdio.h>
int num1= 6;
int myfunc(int num1, int num2);
int main(void){
int a= 2, b= 3;
int c= myfunc(a, b);
printf("%d", c);
return 0;
}
int myfunc(int num1, int num2){
return num1+ num2;
}
위 코드에서 num1이란 전역변수를 선언해 놓고 그 안에 6을 넣어 놓았다.
그리고 myfunc에선 num1과 num2를 더하는 작업을 하는데 myfunc에도 파라미터로 넘어온 num1이라는 변수가 있다.
이럴경우 전역변수보다 지역변수를 우선시 하여 6+3이 아닌 2+3을 하게 된다.
*전역변수는 이왕이변 쓰지 않는 것이 바람직하다.
3. 분기문
분기문은 if else, switch로 이루어 진다
아직 if문밖에 배우지 않았다.
if문은 if()에서 괄호 안이 true면 실행을 한다.
#include <stdio.h>
int myfunc(int num1, int num2);
int main(void){
int a= 2, b= 3;
int c=0;
if(a== 2){
c= myfunc(a, b);
}
printf("%d", c);
return 0;
}
int myfunc(int num1, int num2){
return num1+ num2;
}
if(a== 2)라는 문장에서 a의 값으로 참과 거짓을 판별한다.
a에는 2가 들어가 있으므로 ()안의 값이 true가 되서 c= myfunc(a, b)를 실행한다.
참과 거짓에 대해서는 보통 0을 거짓으로 하며 1을 참으로 간주한다. (사실 0아닌값은 모두 참으로 간주한다)
만약 위 코드에서 if(1)이라고 해놓으면 c= myfunc(a, b)이 구문은 무조건 실행이 될 것이다.