标题:新手不懂哪里出错“求指点”
只看楼主
隐轩
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-3-23
结帖率:0
已结贴  问题点数:20 回复次数:9 
新手不懂哪里出错“求指点”
#include<stdio.h>
#define PI 3.14;
int main()
{
    double r,s;
    r=20.0;
    s=PI*r*r;
    printf("s=%f\n"s);
    return 0;

}

Compiling...
8888.c
C:\Users\HP\Desktop\8888.c(7) : error C2100: illegal indirection
C:\Users\HP\Desktop\8888.c(7) : warning C4552: '*' : operator has no effect; expected operator with side-effect
C:\Users\HP\Desktop\8888.c(8) : error C2146: syntax error : missing ')' before identifier 's'
C:\Users\HP\Desktop\8888.c(8) : error C2059: syntax error : ')'
执行 cl.exe 时出错.

8888.exe - 1 error(s), 0 warning(s)
搜索更多相关主题的帖子: expected Desktop include warning double 
2015-03-23 17:38
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:7 
#define PI 3.14;

授人以渔,不授人以鱼。
2015-03-23 17:41
隐轩
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-3-23
得分:0 
回复 2楼 TonyDeng
这个是什么问题?
2015-03-23 17:43
执笔画江山
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:265
专家分:1010
注 册:2015-1-13
得分:7 
T版V587。话说宏定义有最后的分号么

授人以鱼,不如授人以渔
2015-03-23 17:43
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
你不知道宏替換的本質,自然無法排查錯誤,這就是我一直强調不要再學習C陋習的原因。現代編程不鼓勵用宏,看那些石器時代的教材就專教這種,怎麽勸都不回頭。

1樓的代碼,在預處理程序處理之後,實際上的變成如下的源代碼提交給編譯器編譯:
程序代码:
#include<stdio.h>
int main()
{
    double r,s;
    r=20.0;
    s=3.14;*r*r;        && 編譯器指出第7行,正是這行被宏文本替換後的形式,一看就知道爲什麽會錯
    printf("s=%f\n"s);
    return 0;

}

宏文本替換是障眼法,表面上看原來的第7行是沒問題的,編譯器指出第7行,如果沒有我上面的解釋,你就無論如何都想不到原來問題出在不相干的#define處,它在哪裏你都不知道。這樣造成的問題,你怎麽排查?!好好的寫個正常語句const float PI=3.14F;會死麽?


[ 本帖最后由 TonyDeng 于 2015-3-23 17:52 编辑 ]

授人以渔,不授人以鱼。
2015-03-23 17:48
隐轩
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-3-23
得分:0 
回复 4楼 执笔画江山
谢啦,刚接触有的还不懂,可以啦。多谢
2015-03-23 17:49
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
明白源代碼實際上被處理成怎樣的文本,就很容易明白編譯器給出的4個錯誤是怎麽回事了。

授人以渔,不授人以鱼。
2015-03-23 17:57
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
這裏#define PI行寫在同一個源代碼文件中,還好看得出來,但在正規的編程中,宏是寫在頭文件.h中的,那樣你就算是徹底找不到原因了,憑那信息,你是打死都沒意識是宏造成的問題。如果宏寫得複雜點,你更別想分析出怎麽錯了。

授人以渔,不授人以鱼。
2015-03-23 18:01
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
得分:7 
printf("s=%f\n"s);

这句可以编译通过么?  貌似少了个逗号...

三十年河东,三十年河西,莫欺少年穷!
2015-03-24 17:30
句号压
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2022-4-5
得分:0 
#define N 3
typedef struct student
{
   int num;
    int score;

}MM;
int main ()
{
    MM class1[N]={1,80,2,60,3,70};
    int i=0;int max=0;
    for(i=0;i<N;i++)
    {
        if(MM class1[i]>max)
        max=MM class1[i];
   
    }
printf("最高分为:%d\n",max)

    return0;
}


求大神帮忙看看哪错了
2022-04-05 10:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-442989-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.545137 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved