인프런 커뮤니티 질문&답변

김지훈님의 프로필 이미지

작성한 질문수

ARM Cortex-M 프로세서 프로그래밍

s302_비교와 분기 명령어

libs.s 실행 관련 문의

23.04.01 11:27 작성

·

426

1

안녕하세요~

main.c의 max함수를 실행하면

별다른 include 선언 없이

어떻게 libs.s에 있는 max로직을 타는지 알 수 있을까요?

답변 1

0

홍영기님의 프로필 이미지
홍영기
지식공유자

2023. 04. 02. 20:01

안녕하세요. 김지훈님!

(1)전처리 > (2)컴파일 > (3)링크 와 같은 컴파일 단계에서의 마지막 단계인 링크(link) 과정에서 각 오브젝트 파일내의 심볼들이 교차 결합(cross reference) 되면서 함수나 변수들이 서로 인식됩니다.

어셈블리 언어로 작성된 소스코드도 일반적인 C 함수가 결합되는 과정과 별반 다를 것이 없습니다.

main.c 에서 libs.s 파일내의 함수(max)을 호출할 때 묵시적(implicitly)인 호출이 되지 않게 하기 위해선 아래 그림과 같이 함수 원형을 포함시켜주는 것이 좋습니다.

▼그림. max() 함수의 원형

image

함수 원형(function prototype)을 포함시키지 않아도 컴파일하고 실행하는 것은 문제가 없지만, 컴파일시 경고 메시지가 나올 수 있습니다.