在C语言中什么是语义错误??

来自:网路    更新日期:早些时候
c语言语法错误和语义错误有什么区别,麻烦举个例子~

语法错误可以看作是编码出现了违反C语言规则的错误,一般编译或者链接时,
都会报错的。

而语义错误,也可以叫做逻辑错误,
也就是说你的代码完全符合C语言的规范,不会出现编译/链接的错误,
但是,在逻辑上有错误。
举个简单的例子,
加入编一个代码来统计int数组a的成员总和,成员总数为N:
for(int i=0;i<N;i++;) //这里在i++后面多了一个分号,这是语法错误
sum=sum+a[i];
for(int i=0;i<=N;i++) //这里多了一个i=N的取值,这是语义错误
sum=sum+a[i];

亲,你最后面的return没有打上“;”号
要改成return 0;

一般的程序错误,粗略一点分的话,可以大致分为语法错误和语义错误。

语法错误可以看作是编码出现了违反C语言规则的错误,一般编译或者链接时,
都会报错的。

而语义错误,也可以叫做逻辑错误,
也就是说你的代码完全符合C语言的规范,不会出现编译/链接的错误,
但是,在逻辑上有错误。
举个简单的例子,
加入编一个代码来统计int数组a的成员总和,成员总数为N:
for(int i=0;i<N;i++;) //这里在i++后面多了一个分号,这是语法错误
sum=sum+a[i];

for(int i=0;i<=N;i++) //这里多了一个i=N的取值,这是语义错误
sum=sum+a[i];

语义错误,就是语法上没错误,编译可以通过,也可以运行,也可以得到结果,但结果不符合实际,是错的。这就是语义描述错了。

语文里,我们说“雪是白的”是对的,如果说“雪是黑的”,就是语义错误。

C语言中语义错误有各式各样。例如:

#include<stdio.h>
#include<math.h>
void main()
{ double a=5.0,b=4.0,c;
c = sqrt(b-a);
printf("%lf",c);
}
程序没有语法错误,应当是 c = sqrt(a-b);
写成sqrt(b-a); 出现负数开方,错误。


在C语言中什么是语义错误??视频

相关评论:
  • 13162191842c语言中什么是赋值?什么是错?
    嵇婵胁对于如下说明,语法和语义都正确的赋值是:C、s=&a[1];A、语法上正确(可能引起编译警告)。若非静态变量或全局变量,否则s没有被初始化,是随机值,*s的值无法确定,即没有确定的语义;若是静态变量或全局变量,s被初始化为0,对地址0的解引用操作没有确定的语义。B、错误。理由同上,对随机...

  • 13162191842C语言源程序的编译过程包括哪三个阶段
    嵇婵胁词法分析阶段:读入源程序,对构成源程序的字符流进行扫描和分解,识别出单词,语法分析阶段:机器通过词法分析,将单词序列分解成不同的语法短语,确定整个输入串能够构成语法上正确的程序。语义分析阶段:检查源程序上有没有语义错误,在代码生成阶段收集类型信息 中间代码生成阶段:在进行了上述的语法分析和...

  • 13162191842c语言中输入一个程序后显示无错误,为什么不能运行
    嵇婵胁因为编译器所能检测到的错误信息是有限的,它能检测C语言的语法错误和语义错误,而逻辑错误一般是检测不出来的. 当你输入的程序语法和语义都没有出错但是逻辑出错时,编译会通过,但是运行的时候就通不过了,你需要重新检查你的代码,找出错误改正过来....

  • 13162191842undefined reference to异常怎么解决
    嵇婵胁这是个编程链接错误,意思是说在你的程序里引用了某个函数或变量, 但是链接器找不到该变量的定义.(1)如果报的符号是在某个第三方库里的, 比如uuid的什么什么函数, 则要检查你的libqte是不是编译得正确. 本来这些库应该正确链接到libqte.so上, 这样在qtopia链接的时候就不需要显式的加上这些库了...

  • 13162191842compile error是什么错误
    嵇婵胁compile error 是C语言编辑错误。1、变量未定义就使用,或定义后使用位置超出了定义的作用域。说明:如b=25但程序并未在使用前定义好b的类型,还应注意变量作用域。2、 括号不匹配。说明:()、[]、{}一定要有始就得有终。3、使用非法类型。说明:如__int64在GCC编译器下不识别,你却用它。4、...

  • 13162191842为什么以下c代码不会出错?
    嵇婵胁C语言很宽松的由程序员控制内存操作。而编译过程只是检查语法和语义错误,再翻译成机器可执行的二进制码。相对应的,内存是在运行时候分配的,所以通过编译十分正常。(a+666)=1;第一个是数据类型的问题,1默认是整型可以下转型为char,这里没有问题。另外一个关键,是你认为指针a无法访问超出自己指向...

  • 13162191842C语言,C语言源代码到底是什么意思
    嵇婵胁让大家知道学习这些算法到底有什么用 再往后,我可能会一直教界面编程 直到你们感觉到自己的算法需要深入学习 然后再回过头去学算法 别用什么垃圾TC了,这都什么年代了 新手建议VC6即可,又可以学算法 也能开发MFC界面程序 对电脑配置要求也不搞 甚至绿色精简版就能用 然后写一些游戏相关的工具 或者网络...

  • 131621918421!+是什么意思(C语言)
    嵇婵胁这是个错误的语义,大概 原意图:"1非加"或者"不加1"。前者偶可以理解成 1非要加(1是个固执的数字)什麽。但编译器和正常人类都是不会、不愿理解的,c语言有也不存在这样的(无效的)记号序列。在c++源程序中则可以通过重载运算符加一个对象引用来使这个"表达式"编译通过 ...

  • 13162191842一个c语言字符指针问题!
    嵇婵胁如果按照正常理解,应当总是打印"abcdefg",但是如果你刚才的那个能够执行,那可就不是了。看看下面的程序:bug:ch="abcdefg";printf("%s\\n",ch);(ch+1)='a';goto bug;那岂不是第一次打印"abcdefg",后面都是打印"aacdefg",如果这样也可以,C语言的程序就没办法看了。理论上,这种错误很明显...

  • 13162191842C语言中的switch和default是什么意思
    嵇婵胁switch和default是C语言中的关键词,通常联合使用。switch语句的语法规则:其中switch、case、break、default都是关键字。switch作为开关,当变量表达式的值对应case中的值时,执行case后面的语句后跳出switch语句,如果都不符合则执行default后面的语句后跳出switch语句。

  • 相关主题精彩

    版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

    Copyright © 喜物网