这是我在复习宏定义时的一个发现,先看如下代码:
- #define (double)pingfang(a) ((a)*(a))
- //#define pingfang(a) ((a)*(a))
- int main(int argc, const char * argv[])
- {
-
- // double c = pingfang(5+5)/pingfang(2+2);
- double c = (double)pingfang(5+5)/(double)pingfang(2+2);
- printf("%f\n",c);
- return 0;
- }
复制代码
宏定义的变量都是int 类型的,在计算过程中要得到准确数字必须进行转换运算,被注释掉的就是老师上课讲的原代码,输出答案是6.000000。
现在被我修改之后,首先会报错,报错原因是宏定义必须是标示符,说明宏定义中不能控制类型,只能是int类型,然后去掉宏定义中的(double),在下面的计算中进行转换运算,结果是6.250000。结合老师的讲解,再次说明宏定义中的是int类型。
此上发现也表示我基础还不牢靠,如若有什么不对的地方,还望大家指出,如若有同学也是第一次发现,那么和我一样,还要认真复习验证代码,有很多细节还未被发现,大家加油,争取黑马ios第一班! |