본문 바로가기

프로그래밍/C언어

[C언어 with Java] 메소드의 선언

 

 

C Prog. with Java


C언어를 다루고 있지만, 다른 프로그래밍 언어인 자바와 비교하면서 내용을 구성하고 합니다. 본 글은, 자바를 먼저 어느정도 알고 계시고, 저와 같이 C언어를  공부하고자 하는 분들에게 도움이 되길 바랍니다.

 


 첫번째, 메소드의 선언부 입니다. 

 

 JAVA는 다음과 같은 형태로 기본 메소드가 정의 됩니다.

public void 메소드명(매개변수){       →  변경자 반환타입 메소드명(매개변수)

      바디

} 

 

 C언어에서는  JAVA와는 다르게 다음과 같은 형태를 띕니다.

int 메소드명(매개변수){  → 반환타입 메소드명(매개변수)

     바디

}

 

 명시하지는 않았지만, return 키워드도 동일하게 사용됩니다. 다른점을 꼽는다면 변경자(modifier) 사용여부가 있겠군요.

 

 하지만 중요하게, 알아야 할것이 있는데요. 바로 메소드의 선언위치입니다.

우선 다음과 같은 화면을 보시죠.

 

[코드 - C]

 

 

[결과화면] 

 

 

자바랑 다를것이 없습니다.

 

하지만, 다음에서 위의 main 메소드 위에 있는 add 메소드의 위치를 main 메소드 아래로 위치시켰습니다.

그리고 다음과 같이, 빌드를 시켰는데요.

 

[코드 - C, 빌드 화면]

 

빌드 메시지를 잘 보시면 경고 메시지가 뜬것이 보입니다.

실제로, c언어 관련 책이나 보면,

main 메소드에서 다른 메소드를 호출할 때, 먼저 인식 될 수 있도록 상단에 위치시켜야 한다.

라고 합니다. 그렇지 않으면 오류가 난다고 하는데요.

 

즉, 위에서 아래로 코드가 진행되는데, 메소드를 존재를 인식하지 못하고-메소드가 main 메소드 아래에 위치합니다.-,

메소드를 호출하는 경우입니다.

 

 그렇기 때문에, 빌드과정에서 경고메시지를 띄우는 겁니다.

하지만 마지막 메시지를 잘 본다면 성공적으로 빌드 되는 것을 확인할 수 있을 겁니다.

그리고 다음과 같이 실행시켜봤습니다.

 

[코드 - C, 실행화면]

 

빌드 과정에 이상이 없었기 때문에, 역시나 이상없이 작동 되는 것을 볼 수 있습니다.

 

 근데 여기서 의문점이 사실, 저도 실행될 지는 몰랐습니다.

다른 레퍼런스에서는 "이런 경우를 허용하지 않는다"라고 되어 있는데, 이상없이 되는 것을 보고,

잠시 고민을 해보았습니다.

 

"컴파일러가 업그레이드 되었나? ㅋㅋ"

 

 컴파일러가 업그레이드 되어서 자바처럼 인식을 할리도 없고, 옛날에 C언어 배울때는 안되었던 것 같은데..

그래서 마이크로소프트에서 경고 메시지를 찾아보았습니다.

 

 

 

역시 레퍼런스에서 강조하는 것처럼, 함수에 대해서 인식을 못하는 오류였습니다.

하지만, 컴파일러는 이 존재하지 않는 함수에 대해서 우선적으로 int형으로 반환하는 것으로 간주하고,

빌드가 되지 않는 치명적인 오류는 피하는 것 같았습니다.
- 제 소견은 여기까지구요. 좀 더 설명글은 다른 분께서 댓글로 달아주시길 바라겠습니다.

 

 여기서 한가지!! 레퍼런스에서 얘기한 것처럼, 꼭 위의 사항을 숙지하도록 합시다. 

C에서는 메소드의 존재를 알려야 한다는 점.  자바는 C와 다르게 어느 위치에 메소드를 위치시켜도 된다는 점.

 

 하지만 C에서는 위와 같은 상황을 다음과 같이 함으로써, 경고메시지를 띄우지 않고,

정상적으로 빌드를 시킬 수 있겠습니다.

 

 

 

 main 메소드 위에다가 명시적으로 메소드가 있다라고 표시를 하는 겁니다.

이러면 뒤의 메소드를 우선적으로 인식을 하기 때문에, 밑의 빌드 메시지를 보면, 경고 메시지를 띄우지 않습니다.

 

 참고로, 저렇게 메소드를 표시를 하는 것을 main 메소드 내에서도 할 수 있으나, 그렇게 되면,

다른 메소드에서 add() 메소드를 호출할때, 역시나 같은 상황-add()메소드 보다 먼저 선언되어 있는 상황-이 벌어지게 됩니다.(지역변수의 개념을 떠올리시면 될 것 같아요.)

 

 이것을 해결하기 위해서 저렇게 main 메소드 밖에 선언을 해주어, 글로벌하게 쓸 수 있도록 하는 겁니다.