免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6366 | 回复: 7
打印 上一主题 下一主题

[c] goto语句的疑惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-05 16:18 |只看该作者 |倒序浏览
  1. #include <stdio.h>

  2. int main()
  3. {
  4.   int i;
  5.   for(i = 0; i < 100; i++)
  6.   {
  7.     int k;
  8.     for(k = 0; k < 100; k++)
  9.     {
  10.       if(k%3 == 0)
  11.       {
  12.         goto next_file;
  13.       }
  14.     }
  15. next_file:
  16.   }
  17.   return(0);
  18. }
复制代码
$ cc t.c
t.c: In function 'main':
t.c:16: error: label at end of compound statement

-------------------------

$ g++ t.cpp
t.cpp: In function 'int main()':
t.cpp:22: error: expected primary-expression before '}' token
t.cpp:22: error: expected `;' before '}' token

下面的可以正常运行
  1. #include <stdio.h>

  2. int main()
  3. {
  4.   int i;
  5.   for(i = 0; i < 100; i++)
  6.   {
  7.     int k;
  8.     for(k = 0; k < 100; k++)
  9.     {
  10.       if(k%3 == 0)
  11.       {
  12.         goto next_file;
  13.       }
  14.     }
  15. next_file: ;
  16.   }
  17.   return(0);
  18. }
复制代码
next_file是一个标号, 其后为什么非要一个空语句????

gcc: 4.1.2
OS: centos

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2012-07-05 16:21 |只看该作者
inet_addr 发表于 2012-07-05 16:18
next_file是一个标号, 其后为什么非要一个空语句????


C 语法就是这么要求/规定的。

论坛徽章:
0
3 [报告]
发表于 2012-07-05 16:24 |只看该作者
MMMIX 发表于 2012-07-05 16:21
C 语法就是这么要求/规定的。


c标准中有吗, 这里这么多人讨论c标准的, 能不能给个原文.

PM~~~~~~

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
4 [报告]
发表于 2012-07-05 16:28 |只看该作者
A label name is the only kind of identifier that has function scope. It can be used (in a
goto statement) anywhere in the function in which it appears, and is declared implicitly
by its syntactic appearance (followed by a : and a statement).

论坛徽章:
0
5 [报告]
发表于 2012-07-05 16:39 |只看该作者
bruceteen 发表于 2012-07-05 16:28
A label name is the only kind of identifier that has function scope. It can be used (in a
got ...


ISO_IEC_9899 6.2.1节, 这是说作用域时顺便提到

cc的提示是label at end of compound statement

"{}"是个复合语句, 复合语句也算语句呀(抠字眼的话)

如果那个空语句应该怎么写这段程序呢?

论坛徽章:
0
6 [报告]
发表于 2012-07-05 16:53 |只看该作者
另外, 经常发现g++有类似" expected primary-expression before '}' token"的提示.
   这个primary-expression是什么意思啊,  难道还有secondary-expression这个说法?

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
7 [报告]
发表于 2012-07-05 20:32 |只看该作者
inet_addr 发表于 2012-07-05 16:39
"{}"是个复合语句, 复合语句也算语句呀(抠字眼的话)


複合語句是算語句,可你的 label 也沒在這個複合語句之前呀。

论坛徽章:
0
8 [报告]
发表于 2012-07-05 21:11 |只看该作者
标签 lable: 就行了,不需要添加;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP