[질문] 공유라이브러리 사용시 헤더파일 없어도..
글쓴이: 오호라 / 작성시간: 화, 2008/03/18 - 9:29오전
shared.c #include<stdio.h> void foo ( void ) { printf( "I'm foo\n" ); } void bar ( void ) { printf( "I'm bar\n" ); } > gcc -shared -o libxxx.so shared.c
main.c int main ( int argc, char* argv[] ) { foo(); bar(); return 0; } > gcc -L./ -lxxx -o main main.c
[질문]
main.c:7: warning: implicit declaration of function 'foo'
main.c:8: warning: implicit declaration of function 'bar'
main.c 컴파일타임에서 에러가 없는게 당연하게 아닌가요?
어떤 분이 헤더(프로트타입)가 없는데 어떻게 컴파일에러가 안나냐고 우기시는데...
지식이 짧으신 분이라서 그냥 그러려니하고 함구했는데...
혹시나 해서요. ^^;
Forums:
C standard에 따라 다릅니다
컴파일러가 C99 표준을 엄격히 준수한다면,
함수의 prototype이 선언되지 않은 상태에서 호출되었을 경우 에러가 나는 것이 맞지만,
그렇지 않고, C89, C90등을 따른다면,
그렇게 하지 않더라도 에러는 나지 않는다고 알고 있습니다.
대신 암묵적으로 리턴값과, argument들을 컴파일러가 가정하고 컴파일 한다고 알고 있는데요...;;;
정확히 찾아보고 답글 적는 것이 아니지만, 아마 맞을 겁니다 ^^;;
저도 그렇게 알고 있습니다.
> gcc -W -Wall test.c
> gcc -W -Wall -c test.c
에러가 나는 시점은 ld 시점이죠.
혹시나 했는데 역시나였습니다. 감사합니다.
그 분말씀에 혹해서...
예전에 그분이 저보고 이렇게 쓰는 사람은 첨본다고, 이게 맞냐고, 정확하냐고, 의심을 했던게 떠오르네요.
(ㅡㅡ;)..
Hello World.
의존성을 생각해서
의존성을 생각해서 제대로 만들어진 Makefile 이라면,
make && make install
할 바엔 그냥
make install
을 하겠습니다.
아무튼,
make all install
보다도 더 껄끄럽다는 점에서는 저도 동의합니다.
OTL
C89, C90
사족이지만, C89, C90 등의 C 언어 표준 번호(?)에 대해 문득 의문이 생겨서 잠시 위키피디아를 찾아 보았습니다.
요약하면, 89년 ANSI에 의해 비준된 안을 C89라고 하며, 이것을 90년에 ISO가 표준으로 채택한 것을 C90이라고 한다. 따라서 C89와 C90은 동일한 언어를 가리킨다고 하네요.
프로토타입 선언하지않아서 그런거 같은데요.
.
프로토타입 선언하지않아서 그런거 같은데요.
.
중복 댓글이네여 삭제해주십시요.
[위선,거짓, 인간의 모든 추악함에서 꿋꿋이 살아가는 굶주린 영혼이여 편안한 휴식이 찾아오길 기원하겠습니다.]
[위선,거짓, 인간의 모든 추악함에서 꿋꿋이 살아가는 굶주린 영혼이여 편안한 휴식이 찾아오길 기원하겠습니다.]
댓글 달기