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

gcc 5.4.0与12.2.0中__extension__内break行为差异及Qt编译问题

GCC版本间__extension__代码中break行为差异问题

背景

在树莓派5 64位的Debian GNU/Linux 12(bookworm)系统上编译Qt 4.8.7时,遇到ts文件转qm文件的问题,排查发现根源是Qt foreach仅遍历第一个元素,这是由__extension__代码块中的break行为异常导致的。

问题复现

以下是复现问题的代码:

#include <iostream>

int main()
{
  for (int i = 0; i != 5; ++i)
    for (int j = i;; __extension__ ({break;}))
      std::cout << j << std::endl;
}
  • 在旧版Ubuntu 16.04(gcc版本5.4.0 20160609)上运行,会依次打印0到4;
  • 在树莓派5(gcc版本12.2.0 Debian 12.2.0-14)上运行仅会打印0;
  • 若将代码中的break替换为continue,树莓派5上也能正常打印0到4。

行为验证

通过以下代码可验证break实际作用于外层循环:

#include <iostream>

int main()
{
    for (int j = 1;; __extension__ ({break;}))
      std::cout << j << std::endl;
}

编译该代码会报错:error: break statement not within loop or switch。

疑问

这种差异是__extension__的行为发生了变更,还是一个已知的bug?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 03:41:23