최신 C 컴파일러를 사용한 __STDC_IEC_559__의 상태
C99를 했습니다.__STDC_IEC_559__
컴파일러 및 표준 라이브러리가 ISO/IEC/IEEE 60559(또는 IEEE 754) 표준을 준수하는지 테스트하는 데 사용할 수 있습니다.
.
확인 방법 대부분의 C 컴파일러는 전처리기 매크로를 설정하지 않습니다.__STDC_IEC_559__
.
GCC의 문서에 따르면 그것은 정의하지 않습니다.__STDC_IEC_559__
.
4.9.2 Clang 3.6.0 으로와 .2 및으로 테스트했습니다.glibc
코드를 2.21합니다.
//test.c
//#include <features.h>
int main(void) {
#if defined ( __STDC_IEC_559__ )
//#if defined ( __GCC_IEC_559__ )
return 1;
#else
return 0;
#endif
}
그리고 나서.
echo $?
은 이 로 을 보여줍니다.__STDC_IEC_559__
GCC에서는 정의되지만 Clang에서는 정의되지 않습니다.그 다음에 했습니다.gcc -E
e가 있다는 .stdc-predef.h
포함됩니다.이 파일은 다음을 정의합니다.__STDC_IEC_559__
.
/* glibc's intent is to support the IEC 559 math functionality, real
and complex. If the GCC (4.9 and later) predefined macros
specifying compiler intent are available, use them to determine
whether the overall intent is to support these features; otherwise,
presume an older compiler has intent to support these features and
define these macros by default. */
#ifdef __GCC_IEC_559
# if __GCC_IEC_559 > 0
# define __STDC_IEC_559__ 1
# endif
#else
# define __STDC_IEC_559__ 1
#endif
시켜 줍니다.glibc
GCC가 아닌 이 매크로를 정의합니다.
제가 를 features.h
(또는stdio.h
이 Clang 은도 포함하고 있습니다.__STDC_IEC_559__
정의되어 있습니다.
그렇게__STDC_IEC_559__
는 및(GCC와 Clang됩니다 에 의해 glibc
헤더파일)을 링크한 첫번째 질문에 대한 답변과 일치하지 않는 것 같습니다.
그런 다음 테스트를 했습니다(예:musl-gcc -test.c
) 입니다.glibc
.__STDC_IEC_559__
다음과 같이 정의되지 않았습니다.musl
.
표준 C 라이브러리는 기본 부동 소수점 대수를 정의하지 않는 것으로 알고 있습니다.를 들어 C 준 C다의 .1.0/-0.0
됩니다에 됩니다.
제 질문은 다음과 같습니다(중요한 순서대로 나열됨).
- 요?
__STDC_IEC_559__
에 의해glibc
컴파일러에 의해서가 아니라구요? - 가 나만의 를 내리고 .
__STDC_IEC_559__
: 754다미)에 되지 않은 이미 를 준수하는지 합니다예:1.0/-0.0
또는 에 문서가 있습니까? 이것에 대한 문서나 이것에 대해 테스트할 매크로가 있습니까? - 위키백과는 "사용자들은 이 매크로를 인지해야 합니다.
__STDC_IEC_559__
는 "고 정의되기도 합니다는 정의되지 않는 경우도 있습니다" 이 요?이 진술은 아직도 정확합니까?
.
__STDC_IEC_559__
일부 라이브러리 기능에 의존하며 컴파일러만으로 정의할 수 없습니다.자세한 내용은 이 게시물을 참조하십시오.이것은 C에게 드문 일이 아닙니다. 컴파일러와 C 라이브러리는 전체 표준을 구현하기 위해 때때로 협력해야 합니다.당신이 요구하는 것은 컴파일러에 달려있습니다.이것을 결정하기 위해서는 컴파일러에 대한 특별한 지식이 있어야 한다고 생각합니다.GCC의 구체적인 경우에는 매크로를 정의하여 알려줍니다.설명서의 이 노드에서 다음을 검색합니다.
__GCC_IEC_559
... 저는 이것에 대한 답을 모릅니다 :-).다 GCC할 수 있음을 것 같습니다.
__GCC_IEC_559
IEEE 754를 구현하고자 하는 경우, 실제로 구현하지 않더라도.
언급URL : https://stackoverflow.com/questions/31181897/status-of-stdc-iec-559-with-modern-c-compilers
'programing' 카테고리의 다른 글
WP REST API를 사용하여 사용자 지정 게시 유형에서 데이터를 가져오려면 어떻게 해야 합니까? (0) | 2023.09.21 |
---|---|
일순간에일순간에일순간에 (0) | 2023.09.21 |
자바스크립트: 선택을 기반으로 폼액션 속성 값을 변경하는 방법? (0) | 2023.09.21 |
C89 표준과 함께 M_PI 사용 (0) | 2023.09.21 |
말로크는 C에서 얼마나 클 수 있습니까? (0) | 2023.09.21 |