c언어는 동일한 이름의 함수가 정의되는 것을 허용하지 않는다.

//아래와 같은 코드는 컴파일 오류 발생
 
int MyFunc(int num)
{
	num++;
	return num;
}
 
int MyFunc(int a, int b)
{
	return a+b;
}
 
int main(void)
{
	MyFunc(20);
	MyFunc(30, 40);
	return 0;
}

왜냐면 c언어는 호출한 함수를 찾을 때 함수의 이름만을 사용하기 때문이다.

c++언어는 호출한 함수를 찾을 때 함수의 이름매개변수의 선언, 총 두 가지 정보를 이용하기 때문에 매개변수의 선언형태가 다르다면, 동일한 이름의 함수정의를 허용할 수 있다. 이러한 형태의 함수정의를 가리켜 **함수 오버로딩(Function Overloading)**이라고 한다.

주의할 점으로, c++ 언어에서 함수의 반환형은 함수를 식별하는 기준이 될 수 없기 떄문에 아래와 같이 함수 오버로딩 할 수 없다.

 
void MyFunc(int n) {/*...*/}
int MyFunc(int n) {/*...*/}
 
  • const의 선언유무도 함수 오버로딩의 조건에 해당이 된다.

참고자료

윤성우의_열혈_cpp_프로그래밍