我正在使用一些宏,並觀察一些奇怪的行爲。宏的奇怪行爲C/C++
我已經將PI定義爲常量,然後在宏中使用它將度數轉換爲弧度和弧度度。爲弧度工作正常,但弧度度不:當我編譯和運行,我得到下面的輸出
#include <cmath>
#include <iostream>
using namespace std;
#define PI atan(1) * 4
#define radians(deg) deg * PI/180
#define degrees(rad) rad * 180/PI
int main()
{
cout << "pi: " << PI << endl;
cout << "PI, in degrees: " << degrees(PI) << endl;
cout << "45 degrees, in rad: " << radians(45) << endl;
cout << "PI * 180/PI: " << (PI * 180/PI) << endl;
cout << "3.14159 * 180/3.14159: " << (3.14159 * 180/3.14159) << endl;
cout << "PI * 180/3.14159: " << (PI * 180/3.14159) << endl;
cout << "3.14159 * 180/PI: " << (3.14159 * 180/PI) << endl;
return 0;
}
:
pi: 3.14159
PI, in degrees: 2880
45 degrees, in rad: 0.785398
PI * 180/PI: 2880
3.14159 * 180/3.14159: 180
PI * 180/3.14159: 180
3.14159 * 180/PI: 2880
好像
piTest.cpp我的常數PI在分子中起作用,但不是分母。我在C中觀察到相同的行爲。我正在運行gcc版本4.6.3
任何人都可以解釋爲什麼我會得到這種行爲嗎?
請注意,對於'',您應該有'M_PI'這是一個字面常量。每次使用π時,你的代碼實際上會調用'atan',這會使事情減慢很多。 –
Potatoswatter
'#define PI 3.14159265359' –
我在這裏看不到gcc特有的東西。 – curiousguy