首页 > 解决方案 > C和C++中的外部变量有什么区别?

问题描述

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++cextern

解决方案


externC 和 C++ 中的变量之间没有显着差异。不同的是,有效初始值设定项的规则。在 C 中,具有静态存储持续时间的变量的初始值设定项必须是编译时常量。在 C++ 中,它几乎可以是任何表达式(包括复杂的函数调用)。


推荐阅读