2017-08-08 157 views
1

是否可以声明一个整数而不定义它?C++:如何在不定义的情况下声明非函数?

在C++中,可以分离函数的定义和声明。

// foo.cpp 
int foo(int); 

int foo(int a) { 
    return 45; 
} 

但与非功能,它并不显得

// bar.cpp 
int bar; 
int bar = 10; 

bar.cpp产生这种

$ clang++ -c bar.cpp 
bar.cpp:2:5: error: redefinition of 'a' 
int a = 10; 
    ^
bar.cpp:1:5: note: previous definition is here 
int a; 
    ^
1 error generated. 

娅类型标注的第二条语句产生不同的错误。

// bar2.cpp 
int bar; 
bar = 10; 

产生

$ clang++ -c bar2.cpp 
bar2.cpp:3:1: error: C++ requires a type specifier for all declarations 
bar = 10; 
^ 
1 error generated. 

回答

7
extern int bar; // declares, but does not define bar 
int bar = 10; // defines bar 

注意,这需要bar具有静态存储持续时间。这是一个示例用法。

#include <iostream> 

int main() 
{ 
    extern int bar; 
    std::cout << bar; // this should print 10 
} 

int bar = 10; 
+0

我花费额外的5秒测试,以确保它的工作原理,和别人击败了我! –

4

关键词extern就是为了这个目的,就像本杰明林德利回答的那样。

此外,你应该只是“申报”它没有定义它

extern int bar; 
extern int bar; 
extern int bar; // Repeating doesn't matter 
extern int bar = 10; 
      ^

在这里,我分配一个值bar,它会被视为“定义”,所以最后extern没有效果。

通常为extern的用法是

// File main.cpp 
#include <iostream> 
int main(){ 
    extern int bar; 
    std::cout << bar << std::endl; 
} 

// File bar.cpp 
int bar = 10; 

并与它们编译

g++ main.cpp bar.cpp 
./a.out 

输出:10

相关问题