我正在通过Bjarne Stroustrup"编程原则和实践使用C ++学习C ++"本章练习的第一部分是显示.h文件的使用。这个练习非常简单,我跟着它写了这封信,但我一直都没有明确地提到foo'当我尝试编译。我将把这三个文件写下来,它们是超短的。
顺便说一下,std_lib_facilities.h是一个.h文件,作者包含了一些包含在其中的内容,如iostream以及使用命名空间std;'以及作者写的一些你不时需要使用的功能
my.h - 包含extern int foo; void print_foo(); void print(int);
#ifndef MY_H
#define MY_H
extern int foo;
void print_foo();
void print(int);
#endif
my.cpp - 包含my.h,定义print_foo()以使用cout打印foo值并使用cout打印(int i)以使用cout打印i的值
#include "my.h"
#include "std_lib_facilities.h"
void print_foo()
{
cout << foo << '\n';
}
void print(int i)
{
cout << i << '\n';
}
use.cpp - 包括my.h定义main()以将foo的值设置为7并使用print_foo()打印它并使用print()
打印值99#include "my.h"
int main()
{
foo = 7;
print_foo();
print(99);
}
我正在使用的操作系统是Linux,如果有帮助的话
答案 0 :(得分:2)
在
extern int foo;
extern
表示某处int
名为foo
。但这里没有定义。这只是foo
存在的声明,是对编译器的承诺,foo
将在需要时存在。编译器将继续使用foo
,即使它不知道foo
到底在哪里。
这意味着在其中一个cpp文件中必须有一个
int foo;
定义foo
并保留此承诺。