问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

dev c怎么随时检查语法?

发布网友 发布时间:2022-04-23 00:47

我来回答

1个回答

热心网友 时间:2023-09-30 03:56

语法错误是指在书写语句时没有按照相应的语法格式。常见的语法错误有变量未定义、括号不匹配、遗漏了分号等等。大多数的语法错误都是能够被编译器发现的。因此相比于语意错误,语法错误更容易被发现,更容易被解决。

语法检查的工作由编译器完成,很多情况下编译器无法智能地报告出真正的语法错误数和错误位置。比如缺少一个变量的定义,而该变量在程序中被使用了6次,则编译器可能会报告6个甚至更多的语法错误,而实际上错误只有一个。所以,对编译器来说,任何一个语法错误都可能是“牵一发而动全身”的。

那么在这种可能发生“误报”的情况下,我们如何快速、正确地找到错误的位置呢?

由于编译器是按顺序查找语法错误的,所以它所找到的第一个错误的位置往往是正确的。如果程序规模不大,编译一次的时间不是很长,我们可以每次只修正编译器报告的第一个错误以及由此可以发现的连带错误,直到整个程序没有任何错误为止。

下面我们就用这种方法来检查一个程序的语法错误:(程序11.3.1)
#include <iostream>
mian()
{
int a,b;
for (i=0,i<3,i++)
{
cin >>a >>b;
c=a+b;
cout <<c <<endl;
}
return 0;
}
第一次编译的第一个错误:
I:\program\vc\book\11_3_1\main.cpp(5) : error C2065: 'i' : undeclared identifier//未声明的标识符
……
main.obj - 7 error(s), 3 warning(s)//一共还有7个错误和3个警告

第一次修改:
for (int i=0,i<3,i++)
第二次编译的第一个错误:
I:\program\vc\book\11_3_1\main.cpp(5) : error C2143: syntax error : missing ',' before '<'//逗号语法错误
……
main.obj - 8 error(s), 3 warning(s) //一共还有8个错误和3个警告

第二次修改:
for (int i=0;i<3;i++)
第三次编译的第一个错误:
I:\program\vc\book\11_3_1\main.cpp(7) : error C2065: 'cin' : undeclared identifier//未声明的标识符
……
main.obj - 4 error(s), 3 warning(s) //一共还有4个错误和3个警告

第三次修改:
添加using namespace std;
第四次编译的第一个错误:
I:\program\vc\book\11_3_1\main.cpp(9) : error C2065: 'c' : undeclared identifier//未声明的标识符
……
main.obj - 1 error(s), 1 warning(s)//一共还有1个错误和1个警告
第四次修改:
int c=a+b;
第五次编译的第一个错误:
I:\program\vc\book\11_3_1\main.cpp(12) : warning C4508: 'mian' : function should return a value; 'void' return type assumed//函数需要返回一个值
……
main.obj - 0 error(s), 1 warning(s) //一共还有1个警告

第五次修改:
int mian()
第六次编译:
main.obj - 0 error(s), 0 warning(s)//编译正确
第一次连接的第一个错误:
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main//没有main函数
……
11_3_1.exe - 2 error(s), 0 warning(s)//一共还有2个错误

第六次修改:
int main()
第七次编译:
main.obj - 0 error(s), 0 warning(s)//编译正确
第二次连接:
11_3_1.exe - 0 error(s), 0 warning(s)//连接正确

完整的程序:
#include <iostream>
using namespace std;
int main()
{
int a,b;
for (int i=0;i<3;i++)
{
cin >>a >>b;
int c=a+b;
cout <<c <<endl;
}
return 0;
}

至此,整个程序的所有语法错误都被检查出来并且被修正。程序编译阶段没有任何错误了。通过对这个程序的语法检查,我们总结出以下几点:

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...抛物线y=x2-4x+3与x轴交于A、B两点,与y轴交于点C,连AC,将直线AC向右... 抢劫罪的构成要素有哪些 抢劫罪的几个要素 抢劫罪违反了什么法律 转化型抢劫的法律认定 我想问问我的魔兽世界帐号值多少钱? 我的号能卖多少?(魔兽世界) 求评估魔兽世界账号价值,懂得来! 魔兽世界账号问题,我有一个90级的DK,想便宜出售了,直接卖了,想问问大... 魔兽世界号价值评估 打印机双面打印选项灰色,不可使用请问如何修复 维生素C片什么时候吃最好?饭前吃还是饭后吃还是随时都能吃 三星k2200一体机 怎么恢复原厂设置 经常吃维生素c好吗 HP 5200L 打印机 一点打印就出现双面打印说明是怎么回事? abc3种物质各15克,它们发生反应时只生成30颗星雾质地,若增加十克随时与c恰好 惠普M232DW初始化 有没有什么维生素C含量高的饮料推荐呢? 东芝225 能双面打印吗??? 双面复印可以,可是怎么都找不到双面打印。。。 急急急!!!! 白天可以吃维生素c吗? 平安天天理财C能随时取吗 三星打印机使用双面打印时在回纸一般时被卡纸 c语言中如何随时监测键盘是否有输入 施乐405d 设置双面打印提示load bypass trsyplain? 听说C语言要求定义变量必须在代码最开始处,C++语言可以随时使用,随时定义。是不是在C++中允许出 hp3015打印机如何双面打印 请求宣告专利权无效的法定时间是专利授权后 ( )A 12个月 B 随时 C 3个月 C语言随时获取输入 全新惠普202dw打印机,在打印首选项中设置双面开关打开以后,不管如何 打印机双面打印如何设置? 富国国有企业债c 能随时赎回吗 财通安瑞短绩C可以随时赎回吗? 维生素C可以长期吃吗? 纯用C语言编写,一边可以随时刷新时间显示,一边还可以等待其他键盘输入 建行旺财c款是什么,定期一年,利息2.175,可不可以随时取款(不要息)_百 ... 建信短债债券c灵活申赎,可以随时赎回吗 c语言实现数学加减法如何实现随时退出程序 QQ营销软件,找一款好用的QQ营销软件,谁有? QQ群发软件现在哪个比较好用 ?要有加群和群发的 金桔干泡水喝有什么样的好处? 哪个QQ营销软件好用? 金桔干泡水喝有哪些好处?该注意什么? 金桔干泡水喝有哪些好处? 关于qq营销软件有什么好推荐吗,或者qq群私聊的营销方式? 金桔晒干后怎么吃好? 网上的qq营销软件都是真的么 金桔干泡水喝有何功效 两磅大的蛋糕大概可供几个人吃? 飞讯qq营销软件 有什么用处 金桔干与什么同药性?