회신: 본문의 코드에서 함수 호출이 가능한 이유가 궁금합니다!
, 최 봉준님이 작성문법상 틀린 코드라고 합니다.
(아마도 함수의 선언이 {} 블록 내에 선언되었기 때문에 A라는 명칭에 대한 정보는 main 함수 내에서만 유효하기 때문이라고 생각합니다. 그래서 컴파일 및 실행이 안되야 한다고 생각했었는데 정상 실행되어서 질문 드린것 이기도 하구요. Visual Studio 2015 커뮤니티와 Xcode에서 확인).
C언어 코딩 도장의 책에서 설명하고 있는 방법대로 Visual Studio의 컴파일 경고 수준을 높이면 경고 메시지는 출력됩니다. 다른 컴파일러는 직접 확인해 보진 못했지만 에러 메시지가 출력된다고 도움을 받았습니다.
경고 메시지를 읽어보면 생각대로 바람직 하지 않은 코드라는 것은 '추측'할 순 있습니다. 그러나 A라는 명칭이 유효한 범위를 고려해본다면 함수 호출이 정상적으로 진행될 수 없어야 하는데 현실은 그게 아니였습니다. Visual Studio에서도 Xcode에서도 실행이 되었으니까요.
이제는 어째서 실행이 된걸까? 의문을 품기 시작합니다. 이유를 알고싶어서 여기저기 질문을 했었고 도움 받은 답변 내용을 정리해보면..
문법상 틀린 코드이지만 정상적으로 컴파일 및 실행이 될 수 있었던 이유는 해당 컴파일러들이 똑똑해서(다른 컴파일러에는 없는 확장 기능(?)에 의존했다는 말 같음)라고 합니다. 즉 본문의 코드는 특정 컴파일러에서는 컴파일이 될수도 있고 안될수도 있으므로 항상 컴파일이 될 수 있음을 보장 받을 수 없는 코드가 되어버린 것이죠.