c++ - C 和 C++ 中的外部变量有什么区别?

标签 c++ c extern

b.c 编译失败,b.cpp 可以编译。我不太明白C和C++之间extern的区别。任何人都可以帮助解释为什么 b.c 不起作用但 b.cpp 可以吗?谢谢。

$ cat b.c 

extern int b;
int a = b;
$ gcc -g -Wall -pedantic -c -o b.o b.c
b.c:4:9: error: initializer element is not a compile-time constant
int a = b;
        ^
1 error generated.
$ cat b.cpp 

extern int b;
int a = b;
$ g++ -g -Wall -pedantic -c -o b.o b.cpp
$ ls -g b.o 
-rw-r--r-- 1 staff 2640 Jan  5 10:22 b.o

最佳答案

C 和 C++ 中的 extern 变量之间没有显着差异。不同之处在于有效初始化程序的规则。在 C 中,具有静态存储持续时间的变量的初始值设定项 must be a compile time constant .在 C++ 中,它几乎可以是任何表达式(包括复杂的函数调用)。

关于c++ - C 和 C++ 中的外部变量有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54053892/

相关文章:

c++ - 结构化绑定(bind)和转发引用混合得好吗?

c - C 中的二叉搜索树出现奇怪的故障

c - C编程教程(按问题集)

c - 等价于 Julia 语言中的 C 编程语法 "#define"

c++ - Lambda machine-dependent segmentation-fault(可能是编译器错误?)

c++ - 有没有办法增加宏?

C++:如何访问相同命名空间中但在不同文件中定义的变量?

c - 尝试演示 C 中变量 extern 是必要的情况

c++ - 节点与树中另一个节点的距离最大

c - 将映射地址声明为外部地址