导航:首页 > 源码编译 > 格式没有错但为啥会出现编译异常

格式没有错但为啥会出现编译异常

发布时间:2022-09-12 14:56:47

‘壹’ 编译程序时出现没有错误但有警告的原因

没法错误是因为编译器没有检查出语法错误,有警告是因为有些可能写的不太规范,有时也是不标准,比如你定义一个变量,但是在程序中没有使用它,编译程序时就会警告“定义了没有使用的变量”,如果你用fopen打开文件,编译是就会提示“fopen是一个不安全的函数”等等。但是警告一般不会影响程序的正确性。

‘贰’ c语言问题 代码没有错 但是编译出错

代码有错,修改如下:
#include <stdio.h>
int a[300], cnt=0 ;
double pjz1=0.0, pjz2=0.0 ;
void readDat();
void writeDat();

void jsValue()
{int i,a1,b1,c1,d1;
for(i=0;i<300;i++)
{a1=a[i]/1000;
b1=a[i]/100%10;
c1=a[i]/10%10;
d1=a[i]%10;
if(d1-a1-b1-c1==0)
{ cnt++;
pjz1+=a[i];
}
else pjz2+=a[i];

}
if(cnt==0) pjz1=0;
else pjz1/=cnt;
if(300-cnt==00) pjz2=0;
else pjz2/=300-cnt;

}

main()
{
int i ;

readDat() ;
jsValue() ;
writeDat() ;
printf("cnt=%d\n满足条件的平均值pzj1=%7.2lf\n不满足条件的平均值pzj2=%7.2lf\n", cnt,pjz1,pjz2);
}

void readDat()
{
FILE *fp ;
int i ;
fp = fopen("C:\\WEXAM\\35990001\\in.dat","r") ;
for(i = 0 ; i < 300 ; i++) fscanf(fp, "%d,", &a[i]) ;
fclose(fp) ;
}

void writeDat()
{
FILE *fp ;
fp = fopen("C:\\WEXAM\\35990001\\out.dat","w") ;
fprintf(fp, "%d\n%7.2lf\n%7.2lf\n", cnt, pjz1, pjz2) ;
fclose(fp) ;
}

‘叁’ 为什么我的程序没错误却编译不了

是版本问题,不用担心
这是6.0版的

‘肆’ 为什么编译没有错误,运行却有错误

编译没有错误是因为你的程序语法没有错误.
而运行时则有可能出现逻辑错误.
比如说C#里最常见的"未将对象引用设置到对象的实例",就是说一个对象并没有实力化,或者没有值就去引用了.
再比如连接数据库,语法正确,但是运行时却因为SQL未启动或者连接字符串拼写错误而发生异常.

‘伍’ 求JAVA高手解决没有错的程序 但编译时出现了错 请问是什么原因 是我的电脑问题吗我编译其他程序也是这样

你这个程序是没有错误的,但是输出的是:null的年龄是:0

因为你的构造方法中定义的name和age是局部变量,如果改成这样是可以的
public class Person3{
String name;
int age;
Person3(){
name = "ABC";
age = 20;
}
void display(){
System.out.println(name +"的" +"年龄是:"+ age);
}

public String toString() {
return "Name: " + name + " Age: " + age;
}

public static void main(String[] args){
Person3 d = new Person3();
System.out.println(new Person3()); //此处输出:Name: ABCAge: 20
}
}
原因是因为构造函数中有name和age变量(只是局部变量被初始化了,跟外面的name和age不是一个概念)被初始化了。

在display()方法中访问的变量是成员变量,即String name; int age; 而成员变量如果不赋值的话,String类型默认是null,int类型默认是0。

至于你的错误,你没把代码贴上来啊,是从控制台接收输入值吧!

‘陆’ 已经没有语法错误了,代码编译不成功,怎么破

不正确地创建代码时就会出现语法错误。包括错误地输入关键字,遗漏了不必要的标点符号或者是不正确的结构(例如,For语句少了相应的Next语句,或If关键字所在的行没有条件运算符)。
VisualBasic包含有【自动语法检测】选项,可以在用户编写程序时检测和更正语法错误。如果使用了这个选项,VisualBasic就会在用户输入程序时解释这个程序。当它发现错误时,就会加亮显示这个程序代码并显示一个消息框来解释原因和提供帮助。这样用户就可以在继续编程之前更正错误。
在【工具】菜单中,单击【选项】命令,在【选项】对话框中,单击【编辑器】选项卡,单击【自动语法检测】选项。
当程序语句试图执行一条不可能执行的操作时,就会发生运行时错误。
常见的运行时错误是试图从一个不存在的文件中读取数据,另一个是试图执行被零除的操作。
在用户的程序中为这些错误提供出错处理函数和错误处理例程是很重要的。有关错误处理函数,更详尽的信息请参考第八章“处理错误”。
当应用程序不能按期望的方式执行时会发生逻辑错误。这些错误是很难发现的。因为应用程序的语法完全合法,运行时也不执行非法操作,但是仍然会产生错误。这类错误通常不会产生出错消息。验证应用程序执行的唯一方法就是测试它并分析运行结果。
希望我能帮助你解疑释惑。

‘柒’ c语言helloworld代码是对的,但编译错误

写c语言的时候,如果代码没错,这只能说明语法没有出错,直接导致的结果就是能编译通过,并不意味着执行的结果就是正确的。影响c语言代码执行结果的因素非常多。

一、指针的不正确运用;

二、变量精度问题。char,int,unsigned int,long ,float等,如果变量精度使用不正确,也会影响运算结果;

三、运算符的应用不正确。例如除,取余的区别;

四、正负符号位;

五、运算符的优先级使用;

六、编译器不同。各种编译器也可能造成结果不一致;

C语言虽然是一门比较简单的语言,但是要掌握这些细节,其实并不容易。

‘捌’ 程序编译错误不知道是什么原因

不能通编译过的程序实际上还不是合法的程序,因为它不满足C语言对于程序的基本要求。

检查语法错误的第一要义:集中力量检查系统发现的第一个错误,弄清并改正它。

在编译过程中系统发现的错误主要有两类:基本语法错误和上下文关系错误。这些错误都在表面上,可以直接看得见。也是比较容易弄清,比较容易解决的。关键是需要熟悉C语言的语法规定和有关上下文关系的规定,按照这些规定检查程序正文,看看存在什么问题。

编译中系统发现错误都能指出错误的位置。不同系统在这方面的能力有差异,在错误定位的准确性方面有所不同。有的系统只能指明发现错误的行,有的系统还能够指明行内位置。

一般说,系统指明的位置未必是真实错误出现的位置。通常情况是错误出现在前,而系统发现错误在后,因为它检查到实际错误之后的某个地方,才能确认出了问题,因此报出错误信息。要确认第一个错误的原因,应该从系统指明的位置开始,在那里检查,并从那里开始向前检查。

系统的错误信息中都包含一段文字,说明它所认定的错误原因。应该仔细阅读这段文字,通常它提供了有关错误的重要线索。但也应该理解,错误信息未必准确,有时错误确实存在,但系统对错误的解释也可能不对。也就是说,在查找错误时,既要重视系统提供的错误信息,又不应为系统的错误信息所束缚。

发现了问题,要想清楚错误的真正原因,然后再修改。不要蛮干。在这时的最大诱惑就是想赶快改,看看错误会不会消失。但是蛮干的结果常常是原来的错误没有弄好,又搞出了新的错误。

另一个值得注意的地方:程序中的一个语法错误常常导致编译系统产生许多错误信息。如果你改正了程序中一个或几个错误,下面的弄不清楚了,那么就应该重新编译。改正一处常常能消去许多错误信息行。

解决语法错误

常见语法错误:

1)缺少语句、声明、定义结束的分号。

2)某种括号不配对。C语言中括号性质的东西很多,列举如下:
( ), [ ], { }, ' ', " ", /* */
在不同位置的括号不配对可能引起许多不同的错误信息。

3)关键字拼写错误。

较难认定的典型错误:

1)宏定义造成的错误。这种东西不能在源程序文件中直接看到,是在宏替换之后出现的。常见的能引起语法错误的宏定义错误:宏定义中有不配对的括号,宏定义最后加了不该有的分号,……

解决上下文关系错误

1)变量没有定义。产生这个问题的原因除了变量确实没有大意外,还可能是变量的拼写错误,变量的作用域问题(在不能使用某个变量的地方想去用那个变量)。

2)变量重复定义。例如在同一个作用域里用同样名字定义了两个变量,函数的局部变量与参数重名等。

3)函数的重复定义。可能是用同一个名字定义了两个不同的函数。或者是写出的函数原型在类型上与该函数的定义不相符。有时没有原型而直接写函数调用也可能导致这种错误信息,因为编译程序在遇到函数调用而没有看到函数原型或函数定义时,将给函数假定一个默认原型。如果后来见到的函数定义与假定不符,就会报告函数重复定义错误。

4)变量类型与有关运算对运算对象或者函数对参数的要求不符。例如有些运算(如 %)要求整数参数,而你用的是某种浮点数。

5)有些类型之间不能互相转换。例如你定义了一个结构变量,而后要用它给整数赋值。系统容许的转换包括:数值类型之间的转换,整数和指针之间的转换,指针之间的转换。其余转换(无论是隐含的,还是写出强制)都不允许。参见《C语言程序设计》(K&R)197-199页。

如何看待编译警告

当编译程序发现程序中某个地方有疑问,可能有问题时就会给出一个警告信息。警告信息可能意味着程序中隐含的大错误,也可能确实没有问题。对于警告的正确处理方式应该是:尽可能地消除之。对于编译程序给出的每个警告都应该仔细分析,看看是否真的有问题。只有那些确实无问题的警告才能放下不管。

注意:经验表明,警告常常意味着严重的隐含错误。

常见警告:

1)(局部自动)变量没有初始化就使用。如果对局部指针变量出现这种情况,后果不堪设想。对于一般局部自动变量,没有初始化就使用它的值也不会是有意义的。

2)在条件语句或循环语句的条件中写了赋值。大部分情况是误将 == (等于判断)写成 = 了。这是很常见的程序错误,有些编译程序对这种情况提出警告。

‘玖’ 关于vc中变量声明语法上没错,为什么编译会出错

这是编译器的问题,很多编译器在汉化的时候都出现许多bug漏洞,建议楼主安装原版的英文编译器,这样编译器的故障几率会降低很多

‘拾’ 代码没有错误为什么编译不出来

编译器是一种翻译程序,它用于将源语言(即用某种程序设计语言写成的)程序翻译为目标语言(即用二进制数表示的伪机器代码写成的)程序。后者在windows操作系统平台下,其文件的扩展名通常为.obj。该文件通常还要经过进一步的连接,生成可执行文件(机器代码写成的程序,文件扩展名为.exe)。通常有两种方式进行这种翻译,一种是编译,另一种是解释。后者并不生成可执行文件,只是翻译一条语句、执行一条语句。这两种方式相编译比解释运行的速度要快得多。

2、 编译过程的5个阶段:词法分析;语法分析;语义分析与中间代码产生;优化;目标代码生成。

3、 在这五个阶段中,词法分析的任务是识别源程序中的单词是否有误,编译程序中实现这种功能的部分一般称为词法分析器。在编译器中,词法分析器通常仅作为语法分析程序的一个子程序以便在它需要单词符号时调用。在这一编译阶段中发现的源程序错误,称为词法错误。

4、 语法分析阶段的目的是识别出源程序的语法结构(即语句或句子)是否错误,所以有时又常为句子分析。编译程序中负责这一功能的程序称为语法分析器或语法分析程序。在这一阶段中发现的错误称为语法错误。

5、 C语言的(源)程序必须经过编译才能生成目标代码,再经过链接才能运行。PASCAL语言、FORTRAN语言的源程序也要经过这样的过程。通常将C、PASCAL、FORTRAN这样的语言统称为高级语言。而将最终的可执行程序称为机器语言程序。

6、 在编译C语言程序的过程中,发现源程序中的一个标识符过长,超过了编译程序允许的范围,这个错误应在词法分析阶段发现,这种错误通常被称作词法错误。

 词法分析器的任务是以词法规则为依据对输入的源程序进行单词及其属性的识别,识别出一个个单词符号。

 词法分析的输入是源程序,输出是一个个单词的特殊符号,称为Token(标记或符号)。

 语法分析器的类型有:自下而上、自上而下。常用的语法分析器有:递归下降分析方法是一种自上而下分析方法, 算符优先分析法属于自下而上分析方法,LR分析法属于自下而上分析方法等等。

 通常用正规文法或正规式来描述程序设计语言的词法规则,而使用上下文无关文法来描述程序设计语言的语法规则。

 语法分析阶段中,处理的输入数据是来自词法分析阶段的单词符号。它们是词法分析。

阅读全文

与格式没有错但为啥会出现编译异常相关的资料

热点内容
卡尔曼滤波算法书籍 浏览:766
安卓手机怎么用爱思助手传文件进苹果手机上 浏览:841
安卓怎么下载60秒生存 浏览:800
外向式文件夹 浏览:233
dospdf 浏览:428
怎么修改腾讯云服务器ip 浏览:385
pdftoeps 浏览:490
为什么鸿蒙那么像安卓 浏览:733
安卓手机怎么拍自媒体视频 浏览:183
单片机各个中断的初始化 浏览:721
python怎么集合元素 浏览:478
python逐条解读 浏览:829
基于单片机的湿度控制 浏览:496
ios如何使用安卓的帐号 浏览:880
程序员公园采访 浏览:809
程序员实战教程要多长时间 浏览:972
企业数据加密技巧 浏览:132
租云服务器开发 浏览:811
程序员告白妈妈不同意 浏览:333
攻城掠地怎么查看服务器 浏览:600