在Linux上编译C++代码时报错 jump to label ‘xxxx’ [-fpermissive],看了下代码后发现是goto语句的问题,上网查了一下,原来是goto语句出现之后是不允许出现新声明的变量,所有新声明的变量需放在goto之前。
例如:
goto lab1; // 错
int a = 5;
lab1:;
--------------------------------------分割线------------------------------------------
int a = 5;
int b;
goto lab2; // 对
b = a;
lab2:;
另外,https://zh.cppreference.com/w/cpp/language/goto 上有对goto的详细解释,如下图。其中也提到:Edsger W. Dijkstra 的著名文章《我认为 goto 有害》,呈现了此关键词的大意使用会引入的各种微妙问题的考察。