programing

최신 C 컴파일러를 사용한 __STDC_IEC_559__의 상태

lovejava 2023. 9. 21. 19:59

최신 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 -Ee가 있다는 .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

시켜 줍니다.glibcGCC가 아닌 이 매크로를 정의합니다.

제가 를 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됩니다에 됩니다.

제 질문은 다음과 같습니다(중요한 순서대로 나열됨).

  1. 요?__STDC_IEC_559__에 의해 glibc컴파일러에 의해서가 아니라구요?
  2. 가 나만의 를 내리고 .__STDC_IEC_559__: 754다미)에 되지 않은 이미 를 준수하는지 합니다예:1.0/-0.0 또는 에 문서가 있습니까? 이것에 대한 문서나 이것에 대해 테스트할 매크로가 있습니까?
  3. 위키백과는 "사용자들은 이 매크로를 인지해야 합니다.__STDC_IEC_559__는 "고 정의되기도 합니다는 정의되지 않는 경우도 있습니다" 요?이 진술은 아직도 정확합니까?
  1. .__STDC_IEC_559__일부 라이브러리 기능에 의존하며 컴파일러만으로 정의할 수 없습니다.자세한 내용은 이 게시물을 참조하십시오.이것은 C에게 드문 일이 아닙니다. 컴파일러와 C 라이브러리는 전체 표준을 구현하기 위해 때때로 협력해야 합니다.

  2. 당신이 요구하는 것은 컴파일러에 달려있습니다.이것을 결정하기 위해서는 컴파일러에 대한 특별한 지식이 있어야 한다고 생각합니다.GCC의 구체적인 경우에는 매크로를 정의하여 알려줍니다.설명서의 이 노드에서 다음을 검색합니다.__GCC_IEC_559.

  3. .. 저는 이것에 대한 답을 모릅니다 :-).다 GCC할 수 있음을 것 같습니다.__GCC_IEC_559IEEE 754를 구현하고자 하는 경우, 실제로 구현하지 않더라도.

언급URL : https://stackoverflow.com/questions/31181897/status-of-stdc-iec-559-with-modern-c-compilers