컴퓨터 엑셀 워드 포토숍 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Previous Post C언어] 원주율(PI;파이) 근사값 상수, M_PI 출력 예제Java/자바] main()의 String args[] 배열 용도, 사용법 예제자바스크립트] 숫자 배열, 크기 순 정렬/내림차순 소트; Sort Number Array,...자바스크립트] 문자열 배열, 가나다 순 정렬/내림차순 소팅; Sort String Arra...Java/자바] 문자열 배열 선언, 초기화 예제; String Array비베-VBS-VBA-QBasic 주석 기호; 코멘트 Comment, Remark울트라에디트 사용자 환경 설정파일 위치; UltraEdit-32 Config, ini Fi...윈도우에서 UTF-8 (UTF8) 유니코드 인코딩 txt 파일 읽기; Unicode Fil...배치파일] 옵션 문자열 얻기, 실행시 매개변수 활용 DOS-NT Batch File Opt...배치파일] 사용자 문자열 입력받기, 입력을 변수에 저장: DOS-NT Batch File ...

C언어 에러 해결] error C2065: 'M_PI' : undeclared identifier

Friday, November 10, 2006

문제: 원주율(파이;PI) 값이 담긴 M_PI 상수를 다루려고 하면, math.h 나 cmath 헤더파일을 인클루드해도, M_PI 가 선언되지 않았다 (undeclared identifier) 고 나옴


실제 에러 메시지 문자열:

error C2065: 'M_PI' : undeclared identifier
또는
error C3861: 'M_PI': identifier not found, even with argument-dependent lookup


또한 C++에서는
error C2593: 'operator <<' is ambiguous
could be 'std::basic_ostream<_Elem,_Traits>::_Myt &std::basic_ostream<_Elem,_Traits>
...엄청 복잡한 에러들 산더미처럼 쏟아짐...




해결: 원주율 값이 담긴 M_PI 상수는 C표준이 아니기에, 기본적으로는 사용할 수 없습니다.

그래서

math.h 를 인클루드하기 전에 반드시

#define _USE_MATH_DEFINES

를 정의해 주어야 합니다. (math.h 인클루드 뒤에 선언하면 안됨. 반드시 앞쪽에)


math.h 헤더 파일 내부에 이렇게 되어 있기 때문입니다:

#ifdef  _USE_MATH_DEFINES

/* Define _USE_MATH_DEFINES before including math.h to expose these macro
 * definitions for common math constants.  These are placed under an #ifdef
 * since these commonly-defined names are not part of the C/C++ standards.
 */

/* Definitions of useful mathematical constants
 * M_E        - e
 * M_LOG2E    - log2(e)
 * M_LOG10E   - log10(e)
 * M_LN2      - ln(2)
 * M_LN10     - ln(10)
 * M_PI       - pi
 * M_PI_2     - pi/2
 * M_PI_4     - pi/4
 * M_1_PI     - 1/pi
 * M_2_PI     - 2/pi
 * M_2_SQRTPI - 2/sqrt(pi)
 * M_SQRT2    - sqrt(2)
 * M_SQRT1_2  - 1/sqrt(2)
 */

#define M_E        2.71828182845904523536
#define M_LOG2E    1.44269504088896340736
#define M_LOG10E   0.434294481903251827651
#define M_LN2      0.693147180559945309417
#define M_LN10     2.30258509299404568402
#define M_PI       3.14159265358979323846
#define M_PI_2     1.57079632679489661923
#define M_PI_4     0.785398163397448309616
#define M_1_PI     0.318309886183790671538
#define M_2_PI     0.636619772367581343076
#define M_2_SQRTPI 1.12837916709551257390
#define M_SQRT2    1.41421356237309504880
#define M_SQRT1_2  0.707106781186547524401

#endif  /* _USE_MATH_DEFINES */



_USE_MATH_DEFINES 를 정의하는 예제는 여기에 있습니다: ▶▶ C언어] 원주율(PI;파이) 근사값 상수, M_PI 출력 예제

☞ C/C++

1 Comments:
At 5:44 PM, Blogger silas said...

M_PI가 C표준이 아니기 때문에 특정 컴파일 환경에선 오류가 날 수 있습니다. 주의하세요.

 

Post a Comment

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Categories
Previous Posts
Monthly Archives
Top