programing

C89 표준과 함께 M_PI 사용

lovejava 2023. 9. 21. 19:59

C89 표준과 함께 M_PI 사용

저는 C를 사용하고 있고 상수 M_PI(3.14159...)에 접근하려고 합니다.math.h 헤더 파일을 가져왔지만 M_PI 상수가 정의되지 않았습니다.StackOverflow에 대한 검색을 통해 추가해야 할 사항을 발견했습니다.#define _USE_MATH_DEFINES제 코드(아래 코드 예시 참조)이것은 정상적으로 컴파일할 때는 잘 작동하지만, 나는 그것으로 컴파일 할 수 있어야 합니다.std=c89제가 하고 있는 일에 깃발을 꽂습니다.

C89 코드에서 M_PI에 액세스하려면 어떻게 해야 합니까?

적합한 표준 라이브러리 파일math.h에 필요하지 않을 뿐만 아니라 실제로 정의해서는 안 됩니다.M_PI기본적으로이러한 맥락에서 '기본적으로'는 다음을 의미합니다.M_PI컴파일러 고유의 트릭을 통해서만 정의되어야 하며, 대부분은 예약된 식별자를 사용하여 정의되지 않은 동작을 수행해야 합니다.

상수를 직접 정의하십시오(이름을 사용할 수 있음).M_PI자유롭게, 그러나 만약 당신이 코드를 적합하지 않은 컴파일러로 컴파일할 수 있기를 원한다면, 당신은 먼저 다음을 확인해야 합니다.M_PI아직 정의되지 않았습니다).관례상 다음과 같이 정의하지 마십시오.M_PI파이 이외의 다른 것으로서.

나는 갈 것입니다.

#ifndef M_PI
#    define M_PI 3.14159265358979323846
#endif

M_PIC 표준에서 요구하는 것은 아니며, 단지 일반적인 확장이기 때문에 표준이 되고 싶다면 그것에 의존하지 말아야 합니다.그러나, 당신은 당신 자신의 것을 쉽게 정의할 수 있습니다.#define저번에 확인했을 때는 보편 상수라서 혼동의 여지가 별로 없어요.:)

문제가 무엇인지 알 수 없습니다. -std=c89와 _USE_MATH_DEFINES 사이에 호환되지 않습니다. 하나는 컴파일러가 컴파일할 언어를 정의하고, 다른 하나는 math.h의 어떤 부분이 활성화되는지 정의합니다.

활성화된 부분은 ISO C 표준 라이브러리의 일부로 정의되지 않지만 표준 C 언어가 아닌 것과 동일하지 않습니다. 언어 및 라이브러리는 C의 개별 엔티티입니다.자체 헤더에 매크로를 정의한 경우와 마찬가지로 C89를 준수합니다.

그러나 코드가 아닌 명령줄에서 매크로를 정의할 것을 제안합니다.

-std=c89 -D_USE_MATH_DEFINES

M_PI를 정의하지 않는 math.h 구현이 발생하면 명령행 정의 매크로를 유사하게 사용하여 코드 수정 없이 쉽게 수정할 수 있습니다.

-std=c89 -DM_PI=3.14159265358979323846

언급URL : https://stackoverflow.com/questions/5007925/using-m-pi-with-c89-standard