getopt 함수 궁금점

appleinu의 이미지

getopt 함수 코드 좀 보고 싶어서 찾아보았는데 cscope 로 함수 헤더부만
나오고 본체는 못찾겠네요 ㅎ 라이브러리만 제공되는 함수인지..제가 못찾는건지
혹시 아시는 분 계시면 답변좀 부탁드립니다.

그리고 함수 선언부에
extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) __THROW;

이런식으로 __THROW 가 붙어 버리는데 무엇을 의미하는건가요?

bootmeta의 이미지

즐거운 나날...

ubutun 기준이면

apt-get source libc6-dev

압축 해제 후 getopt*로 find하시면 관련 소스 파일들을 찾을 수 있습니다.

__THROW 매크로는 "/usr/include/getopt.h"에 다음 처럼 정의되어 있습니다.
gcc에서 cpp로 컴파일 시 __THROW는 에러 핸들링 throw()로 바뀝니다.
"/usr/include/sys/cdefs.h"에 좀 더 명확하게 매크로 정의가 있습니다.

#ifndef __THROW
# ifndef __GNUC_PREREQ
#  define __GNUC_PREREQ(maj, min) (0)
# endif
# if defined __cplusplus && __GNUC_PREREQ (2,8)
#  define __THROW	throw ()
# else
#  define __THROW
# endif
#endif