user-0 提问: 请问各位大神我这个程序哪里出问题了编译总是通不过

回复:
user: user-1
content: 1、把DIST宏放到一行  2、if (DIST(&(rd.pos)), &ps) > rd.radius*rd.radius){ 这句括号不对称

user: user-2
content: 括号去掉，宏定义换行加\，楼上的没错

user: user-0
content: 加了\问题解决了，感谢阿

user: user-2

user: user-3
content: 引用 6 楼 michaelwu1979 的回复:你们这里编译有通过吗？去掉多余的括号还是一样出错 引用 6 楼 michaelwu1979 的回复:你们这里编译有通过吗？去掉多余的括号还是一样出错 需要改两个地方，宏定义的地方加\，还有就是你改过的去掉括号 两个地方都改了吗？

user: user-3
content: 引用 6 楼 michaelwu1979 的回复:你们这里编译有通过吗？去掉多余的括号还是一样出错 错误还是一样吗？ 我在我的环境里改制后测试没问题。能够编译通过

user: user-0
content: 你们这里编译有通过吗？去掉多余的括号还是一样出错

user: user-0
content: 改了，还是出错阿

user: user-3
content: 另外，宏定义若是多行，并且多行是相连的，建议加一个反斜线\  #define DIST(p_a,p_b) (((p_a)->row -(p_b)->row)*((p_a)->row -(p_b)->row)\         + ((p_a)->col - (p_b)->col)*((p_a)->col - (p_b)->col))

user: user-0
content: 以下是出错报告，请大神看看：  01homework.c:37:18: 错误：‘ROUND’没有名为‘pos’的成员  else if(DIST(&(rd.pos),&ps)== rd.radius*rd.radius){                   ^ 01homework.c:11:26: 附注：in definition of macro ‘DIST’  #define DIST(p_a,p_b) (((p_a)->row -(p_b)->row)*((p_a)->row -(p_b)->row) +                            ^ 01homework.c:37:18: 错误：‘ROUND’没有名为‘pos’的成员  else if(DIST(&(rd.pos),&ps)== rd.radius*rd.radius){                   ^ 01homework.c:11:51: 附注：in definition of macro ‘DIST’  #define DIST(p_a,p_b) (((p_a)->row -(p_b)->row)*((p_a)->row -(p_b)->row) +                                                     ^ 01homework.c:37:28: 错误：expected expression before ‘==’ token  else if(DIST(&(rd.pos),&ps)== rd.radius*rd.radius){                             ^ 01homework.c:37:51: 错误：expected ‘)’ before ‘{’ token  else if(DIST(&(rd.pos),&ps)== rd.radius*rd.radius){                                                    ^ 01homework.c:44:1: 错误：expected expression before ‘}’ token  }  ^ [michael@mingming Cstd]$ vi 01homework.c [michael@mingming Cstd]$ clear  [michael@mingming Cstd]$ vi ls [michael@mingming Cstd]$ ls 01homework.c  add.o      lianxi.c   main.c      print.h    struct2.c       条件编译1.c ABS.c         alpha.c    login.c    main.o      round.c    struct.c        条件编译.c add.c         a.out      lottery.c  Makefile    square.c   SUB.c add.h         lianxi1.c  main1.c    mystrcat.c  struct1.c  zhizhenshuzu.c [michael@mingming Cstd]$ gcc 01homework.c 01homework.c:12:7: 错误：expected ‘)’ before ‘->’ token  ((p_a)->col - (p_b)->col)*((p_a)->col - (p_b)->col))         ^ 01homework.c:16:2: 警告：数据定义时没有类型或存储类 [默认启用]  }POS;   ^ 01homework.c:19:3: 错误：expected specifier-qualifier-list before ‘POS’    POS pos;    ^ 01homework.c: 在函数‘main’中: 01homework.c:25:5: 错误：expected ‘;’ before ‘ps’  POS ps = {};      ^ 01homework.c:27:18: 错误：‘ROUND’没有名为‘pos’的成员  scanf("%d%d",&(rd.pos.row),&(rd.pos.col));                   ^ 01homework.c:27:32: 错误：‘ROUND’没有名为‘pos’的成员  scanf("%d%d",&(rd.pos.row),&(rd.pos.col));                                 ^ 01homework.c:29:16: 错误：‘ROUND’没有名为‘radius’的成员  scanf("%g",&(rd.radius));                 ^ 01homework.c:30:39: 错误：‘ROUND’没有名为‘radius’的成员  printf("圆的周长为%g\n",CIRCLE(rd.radius));                                        ^ 01homework.c:9:26: 附注：in definition of macro ‘CIRCLE’  #define CIRCLE(r)  2*PI*(r)                           ^ 01homework.c:31:37: 错误：‘ROUND’没有名为‘radius’的成员  printf("圆的面积为%g\n",AREA(rd.radius));                                      ^ 01homework.c:10:24: 附注：in definition of macro ‘AREA’  #define AREA(r)    PI*(r)*(r)                         ^ 01homework.c:31:37: 错误：‘ROUND’没有名为‘radius’的成员  printf("圆的面积为%g\n",AREA(rd.radius));                                      ^ 01homework.c:10:28: 附注：in definition of macro ‘AREA’  #define AREA(r)    PI*(r)*(r)                             ^ 01homework.c:33:16: 错误：‘ps’未声明(在此函数内第一次使用)  scanf("%d%d",&(ps.row),&(ps.col));                 ^ 01homework.c:33:16: 附注：每个未声明的标识符在其出现的函数内只报告一次 01homework.c:34:18: 错误：宏“DIST”需要 2 个参数，但只给出了 1 个  if(DIST(&(rd.pos)),&ps)> rd.radius*rd.radius){                   ^ 01homework.c:34:4: 错误：‘DIST’未声明(在此函数内第一次使用)  if(DIST(&(rd.pos)),&ps)> rd.radius*rd.radius){     ^ 01homework.c:34:24: 错误：expected expression before ‘>’ token  if(DIST(&(rd.pos)),&ps)> rd.radius*rd.radius){                         ^ 01homework.c:34:45: 错误：expected statement before ‘)’ token  if(DIST(&(rd.pos)),&ps)> rd.radius*rd.radius){                                              ^ 01homework.c:37:1: 错误：‘else’之前没有‘if’  else if(DIST(&(rd.pos),&ps)== rd.radius*rd.radius){  ^ 01homework.c:37:18: 错误：‘ROUND’没有名为‘pos’的成员  else if(DIST(&(rd.pos),&ps)== rd.radius*rd.radius){                   ^ 01homework.c:11:26: 附注：in definition of macro ‘DIST’  #define DIST(p_a,p_b) (((p_a)->row -(p_b)->row)*((p_a)->row -(p_b)->row) +                            ^ 01homework.c:37:18: 错误：‘ROUND’没有名为‘pos’的成员  else if(DIST(&(rd.pos),&ps)== rd.radius*rd.radius){                   ^ 01homework.c:11:51: 附注：in definition of macro ‘DIST’  #define DIST(p_a,p_b) (((p_a)->row -(p_b)->row)*((p_a)->row -(p_b)->row) +                                                     ^ 01homework.c:37:28: 错误：expected expression before ‘==’ token  else if(DIST(&(rd.pos),&ps)== rd.radius*rd.radius){                             ^ 01homework.c:37:51: 错误：expected ‘)’ before ‘{’ token  else if(DIST(&(rd.pos),&ps)== rd.radius*rd.radius){                                                    ^ 01homework.c:44:1: 错误：expected expression before ‘}’ token  }  ^ [michael@mingming Cstd]$

user: user-3
content: #include<stdio.h>  #define PI 3.14f #define CIRCLE(r)  2*PI*(r) #define AREA(r)    PI*(r)*(r) #define DIST(p_a,p_b) (((p_a)->row -(p_b)->row)*((p_a)->row -(p_b)->row)\         + ((p_a)->col - (p_b)->col)*((p_a)->col - (p_b)->col))  typedef struct{     int row;     int col; }POS;  typedef struct{     POS pos;     float radius; }ROUND;  int main(){     ROUND rd = {};     POS ps = {};     printf("请输入圆心坐标：");     scanf("%d%d",&(rd.pos.row),&(rd.pos.col));     printf("请输入圆半径：");     scanf("%g",&(rd.radius));     printf("圆的周长为%g\n",CIRCLE(rd.radius));     printf("圆的面积为%g\n",AREA(rd.radius));     printf("请输入任意点的坐标：");     scanf("%d%d",&(ps.row),&(ps.col));     if(DIST(&(rd.pos),&ps) > rd.radius*rd.radius) {         printf("输入点在圆外\n");     }     else if(DIST(&(rd.pos),&ps)== rd.radius*rd.radius){         printf("输入点在圆边上\n");     }     else{         printf("输入点在圆内部\n");     }     return 0; } 参考一下吧  语法错误出在： if(DIST(&(rd.pos),&ps) > rd.radius*rd.radius) {         printf("输入点在圆外\n");     } &(rd.pos))后面有两个括号。多了一个括号

user: user-2
content: 你最好把编译错误报告贴上来看看，ROUND rd = {};  POS ps = {};这样初始化结构体有问题