작성
·
509
0
안녕하세요. 임베디드 초보입니다. 강의 잘듣고있습니다.
한가지 궁금한점이 있는데, _write 함수를 정의하시고, 이를 호출하는 부분이 없는데 어떻게 printf("Hello\n")만으로 len사이즈까지 글자를 출력하는지요...
정의하신 _write 함수 호출이 없는 데 문자열 출력이 되는 것이 이해가 가지 않습니다.
다시 말해, printf함수로만 써서는(호출해서는) hello가 터미널로 출력이 되지 않는데 _write 함수 정의를 통해 호출없이 어떻게 터미널로 출력이 되는지요?..
질문의 요지가 이해가 안가실 수도 있는데, _write 함수를 호출하지 않은데 정의를 해준 것이 근본적인 의문입니다.
답변 1
1
안녕하세요 답이 좀 늦었습니다.
질문에 대한 알림이 안떠서 확인이 늦었네요.
좋은 질문 입니다.
우리가 익히 알고있는 C언어의 문법으로는 해석이 불가능해 보이지만, IDE 마다 특수한 기능을 포함하고 있어서, _write() 함수 호출 없이도 자동으로 호출되는 거라고 이해하시면 됩니다.
TrueSTUDIO나 CubeIDE의 경우는 printf() 호출 시 그 안에서 _write()가 자동으로 호출됩니다.
따라서 우리가 명시적으로 _write() 를 호출하지 않아도 되는 것이죠.
(또한 사용자가 직접 printf() 함수 내부의 코드를 변경할 수 없습니다.)
_write() 함수를 정의하는 것을 출력 장치 재지정(?) 이라고 합니다. 영어로는 redirection 한다고 합니다.
이 redirection 하는 방법은 IDE마다 다른데, 만약 KEIL이나 IAR 같은 다른 IDE를 사용하신다면 다른 방식으로 정의해주어야 합니다.
redirection 하는 방법은 IDE의 매뉴얼에 소개되어있습니다.
이해가 좀 되셨는지 모르겠네요!