2011-10-28 2 views
2

제목은 모든 것을 말합니다. <csetjmp>을 넣은 후 longjmpjmp_bufstd 네임 스페이스에 있지만 setjmp은 포함되지 않습니다. MinGW4.5 및 MSVC10에서이 점을 확인했습니다. <csetjmp> 헤더를 살펴본 후이 선택의 이유를 파악할 수 없었습니다. 모든 <cheader> 파일이 <header.h>std 네임 스페이스에 포함한다고 항상 가정합니다.<csetjmp>을 포함 할 때 setdmp가 std 네임 스페이스에없는 이유는 무엇입니까?

내가 틀렸어? setjmp 전용 케이스의 근거는 무엇입니까? 제발 저를 계몽하십시오!

참고 : C++에서 setjmp/longjmp를 잘못 사용하는 문제에 대해 알고 있습니다.

+0

'sigsetjmp()'를 대체 할 수 있습니까? – sarnold

+0

아니요, 을 포함시킨 후 std 네임 스페이스 내부와 외부 모두에서 사용할 수있는 sigsetjmp가 없습니다. – overcoder

+0

사용하지 않으려면 잘하면. 그러나 아니요, 매크로에는 네임 스페이스 범위가 없습니다. –

답변

3

setjmp 매크로로서 구현 될 수 있으며, 따라서 C++ 표준이 17.6.1.2 [헤더]에 대답했다 : 의 매크로로 정의한다 C에서의 매크로로 정의

이름 C++ 표준 라이브러리. C가 구현 용 라이센스를 부여하는 경우에도 함수로 . [참고 : assert, offsetof, setjmp, va_arg, va_endva_start : C에서 매크로로 정의 된 이름이 다음과 같습니다. -end note]

즉, 매크로입니다.

+0

감사! 그러나 다음과 같은 별칭을 정의하는 것이 가능하지 않습니다 :'#define std :: setjmp setjmp'? – overcoder

+2

@overcoder, 아니요. 그것은 적절한 매크로가 아닙니다. – MSN

+1

@overcoder : 매크로 이름은 하나의 식별자 일 뿐이므로 불가능합니다. –