You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ do-while循环}前放标签为何报expected primary expression错误

C++ do-while循环中标签直接置于闭合大括号前报错的原因

核心原因

C语法明确规定:**标签(label)本身不是独立的语法单元,只能作为语句的前缀存在,标签后面必须紧跟一个合法的C语句**,不允许标签后直接跟块结束标记}。

报错场景分析

对应问题中的报错写法,标签label直接放在do块的闭合}前时:

do{
    if(x==2) goto label;
    
    printf("%d", x);
label:
}while(--x);

此时标签label后面没有任何合法语句,直接接块结束标记},不符合语法要求,编译器就会抛出expected primary-expression before ‘}’ token的错误,提示需要在}前提供一个合法的表达式/语句作为标签的修饰对象。

示例中空语句的作用

代码中加在标签后的单独分号;是C++中的空语句,本身就是合法的语句类型,刚好满足标签后必须跟语句的要求,所以编译可以正常通过。
除了空语句之外,也可以用其他无副作用的合法语句替代,比如空块{},只是单独分号的写法最简洁通用。

补充说明

这个语法规则是全局通用的,并非do-while循环独有:任何场景下把标签直接放在块结束标记}前,都会触发相同的编译错误。


内容的提问来源于stack exchange,提问作者Sadeesh Kalhara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 01:06:10