无法理解C和C++中静态的行为

oja*_*360 -5 c c++

#include <stdio.h>

int main()
{
    goto lb;
    static int a=5;

lb:
    goto b;
    int b=6;

b:
    printf("%d %d",a,b);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我使用".c"文件扩展名保存此代码时,它运行良好,输出为5,后跟"垃圾"值.

但是,在C++中,它会导致错误.我无法理解为什么会有错误.你能告诉我怎么解决吗?

Lig*_*ica 5

这与静力无关.您可以使用一小段代码重现您的问题,该代码根本没有static变量.

编译错误非常明确:

main.cpp: In function 'int main()':
main.cpp:12:1: error: jump to label 'b' [-fpermissive]
 b:
 ^
main.cpp:9:10: error:   from here [-fpermissive]
     goto b;
          ^
main.cpp:10:9: error:   crosses initialization of 'int b'
     int b=6;
         ^
Run Code Online (Sandbox Code Playgroud)

C++有针对goto初始化的跳跃规则; 这与它对类和对象的支持密切相关,这些类和对象通常比您在C中创建的对象复杂得多.

你应该阅读这篇文章.