早教吧 育儿知识 作业答案 考试题库 百科 知识分享

宏常量定义与函数问题#include<stdio.h>#definePI3.14/*********Found************/#defineS(bj)PI*(bj)*(bj)intmain(void){/*********Found************/floatmianJi;mianJi=S(2+3);printf("mianji=%5.2f\n",mianJi);return0;}

题目详情
宏常量定义与函数问题#include<stdio.h> #define PI 3.14 /*********Found************/ #define S(bj) PI*(bj)*(bj) int main(void) { /*********Found************/ float mianJi; mianJi = S(2+3); printf("mian ji=%5.2f\n", mianJi); return 0;} 请问#define S(bj) PI*(bj)*(bj)是什么意思,为什么改成#define S(bj) PI*bj*bj答案就不对了
▼优质解答
答案和解析
带参宏定义 c语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。 带参宏定义的一般形式为: #define 宏名(形参表) 字符串 在字符串中含有各个形参。 带参宏调用的一般形式为: 宏名(形参表) 例如: #define M(y) ((y)*(y)+3*(y)) /*宏定义*/ k=M(5); /*宏调用*/ 在宏调用时,用实参5去代替形参y,经预处理宏展开后的语句为: k=5*5+3*5 -------------------- #define S(bj) PI*(bj)*(bj) 中 3个bj都是参数,在运行是会有数据代替。电脑会认为是 PiX5X5. #define S(bj) PI*bj*bj 中后2个bj没有括号所以只是字符而已,运行时会报错.因为电脑不认识PI*bj*bj这字符串代表什么。