c语言中为什么在分号后面可以有n个分号

newgina 2002-12-17 10:04:31
c语言中为什么在分号后面可以有n个分号

这个现象我偶然发现为什么第一个cout可以执行可第二个却不能呢
#include<iostream.h>

void main()
{
cout<<"ok"<<endl;;;;;;;;;;;;;;;;;;
cout<<"ok"<<endl;aaaaaaaaaaaaaaaaaaaaaaaaa
}
错误如下:
--------------------Configuration: 分号后面 - Win32 Debug--------------------
Compiling...
分号后面.cpp
C:\Documents and Settings\分号后面.cpp(8) : error C2065: 'aaaaaaaaaaaaaaaaaaaaaaaaa' : undeclared identifier
C:\Documents and Settings\分号后面.cpp(8) : error C2143: syntax error : missing ';' before '}'
Error executing cl.exe.

分号后面.exe - 2 error(s), 0 warning(s)
...全文
1183 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
furnace 2002-12-18
  • 打赏
  • 举报
回复
begincsdn(begincsdn)老兄,你这个例子举的,有那么一点不是味道

其实就是
while( *strDest != ‘\0’ )
{
*strDest++ = * strSrc++;
}
阿发伯 2002-12-18
  • 打赏
  • 举报
回复
空语句有时也有用处,如:

#include <stdio.h>
int v[10] ={1,2,3,4,5,6,7,8,9,10};

void main()
{
int s = 0;
for(int i = 0; i < 10; s += v[i], i ++); //空语句作循环体
printf("%d", s);
}
windcsn 2002-12-18
  • 打赏
  • 举报
回复
;表示一句话的结束
;aaa显然这句花还没有结束
俞庆平 2002-12-18
  • 打赏
  • 举报
回复
空语句也是有它空的作用的,请看代码:
char *strcpy(char *strDest, const char *strSrc);
{
assert((strDest!=NULL) && (strSrc !=NULL));
char *address = strDest;
while( (*strDest++ = * strSrc++) != ‘\0’ );
return address ;
}

while( (*strDest++ = * strSrc++) != ‘\0’ );
这一句如果没有空语句会有什么问题?

还有一种空语句形式就是成对的花括号
{}
520pluto 2002-12-18
  • 打赏
  • 举报
回复
分号代表一个语句的结束,中间没有内容是空语句,不影响运行,但后面是aaaaaaaaaaaa,c就认不出了,当然会有出错信息了。
gemdragon 2002-12-17
  • 打赏
  • 举报
回复
楼主,,,分号是一个语句结束的标志。很多分号,,就表示很多个语句结束。当然,分号前面什么都没有,那就是空语句,编译会通过。

分号后面的那么多的字母a,会跟下一个分号前面的所有字符(除了回车)一块看作是一个语句。这样的语句当然不合法,,,编译不通过。
gemdragon 2002-12-17
  • 打赏
  • 举报
回复
楼上,,不用我试,,,我可以告诉你::

不行。

因为,如果定义了,,那么“main()”就变成:“m;in()”了,,,呵呵。。。。

别忘了main里面也有a字母哦,,,,^_^
csr1103 2002-12-17
  • 打赏
  • 举报
回复
楼主,不会这个样子吧?
这个也来玩啊,呵
确实难讲清
空语句,还有空函数的概念而已。
而你的"aaaaaaaaaaaaaa"它当然不知道什么意思了。
如果你在前面写一个宏定义 #define a ;
看能不能通过?:)
我也没试过,大家试了的告诉我好吗?
qy789 2002-12-17
  • 打赏
  • 举报
回复
分析的很对呀
晨星 2002-12-17
  • 打赏
  • 举报
回复
分号表示语句的结束。几个分号就是几条语句。
bryan99 2002-12-17
  • 打赏
  • 举报
回复
分号代表空语句...
就是什么都不做的语句...
但只要有一个分号,就算是一个语句...
chinareny 2002-12-17
  • 打赏
  • 举报
回复
c的编译器在确定语句结束使用;来确定,而不是你看的什么回车
当他执行到一个;是他将执行一条空语句,也有可能在代码优化的时候就给你去掉了也未可知,所以没错

而你的那些a用上面的原则去判断的时候就会报错!

c中还有一些也是不会正确的,例如你在两个;之间有很多空格,他也不会说什么:)
passion2002 2002-12-17
  • 打赏
  • 举报
回复
说的对!
yatuor 2002-12-17
  • 打赏
  • 举报
回复
因为每个;表示一个空语句
isunning 2002-12-17
  • 打赏
  • 举报
回复
;是用来表一个语句的结束
;;;;;;;;;;;;;;;是表两个分号间语句为空,编译当然通得过
而;aaaaaaaaaaaaaaaaaaaaaaaaa
表在分号表的语句结束后,有一个新的语句aaaaaaaaaaaaaaaaaaaaaaaaa
当然这是个非法的语句,所以预处理是通不过的

hzhqw 2002-12-17
  • 打赏
  • 举报
回复
分号表示一条语句的结束。你用分号只是代表一条语句的结束 ,不影响大局。
zhengguoshan 2002-12-17
  • 打赏
  • 举报
回复
它只是表示时候间隔, 不起什么作用的。。
具体究竟为什么,我也不太清楚。。

70,005

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧