$ make test
cc test.c -o test
/tmp/ccMNprYw.o: In function main': test.c:(.text+0x24): undefined reference to pow’
collect2: ld returned 1 exit status
make: *** [test] 오류 1
math.h를 쓸경우 -lm 해주는 게 정답입니다. 링커가 pow 함수콜을 해당 라이브러리에 매칭해주는거죠.
pow(10,3)의 경우 왜 에러가 안날까 생각해보니, 이미 답이 정해져 있는 함수콜이므로 함수콜을 수행하는 코드 생성을 안하고, double의 숫자 1000f로 치환한 듯 보이네요.
그러면 a=3, pow(10,(double)a) 의 경우 함수콜로 코드 생성을 하기 때문에 에러가 발생한다는 건데, 이 정도는 컴파일러의 최적화가 수행된다면 숫자로 치환이 가능하다는 것을 쉽게 발견할 수 있습니다.
예상대로 gcc test.c -o test -O1 처럼 최적화 단계 옵션(-O1)을 주니 링커 에러가 발생하지 않는군요.
vio님 덕분에 몰랐던 내용을 자세히 생각해보는 계기가 되었습니다.