我已经将PI定义为常量,然后在宏中将其用于将度数转换为弧度,将弧度转换为度数.弧度到弧度的工作正常,但弧度到度数不会:
piTest.cpp:
#include <cmath>#include <iostream>using namespace std;#define PI atan(1) * 4#define radians(deg) deg * PI / 180#define degrees(rad) rad * 180 / PIint 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.14159PI,in degrees: 288045 degrees,in rad: 0.785398PI * 180 / PI: 28803.14159 * 180 / 3.14159: 180PI * 180 / 3.14159: 1803.14159 * 180 / PI: 2880
似乎我的常数PI在分子中起作用,但不是分母.我在C中观察到相同的行为.我正在运行gcc版本4.6.3
任何人都可以解释为什么我会得到这种行为?
解决方法 宏是(相对简单的)文本替换.在定义中使用括号(包括宏本身和宏参数):
#define PI (atan(1) * 4)#define radians(deg) ((deg) * PI / 180)#define degrees(rad) ((rad) * 180 / PI)总结
以上是内存溢出为你收集整理的宏C/C++的奇怪行为全部内容,希望文章能够帮你解决宏C/C++的奇怪行为所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)