在其他源文件中没有通用的头文件访问功能

Without common header file access function in other source file

本文关键字:文件 访问 功能 源文件 其他      更新时间:2023-10-16

是否可以调用在.cpp中定义的函数以在b.cpp中使用,而无需在任何头文件中声明.cpp中的函数。

是的,但不推荐使用。

头的包含实际上是将头的内容有效地放入源代码中,位于预处理器找到#include指令的确切位置。因此,不使用include指令,代码可以手动写入该位置,程序将是相同的:

带标题:

//a.h
void foo();
//a.cpp
#include "a.h"
void foo() {
//do something
}
//b.cpp
#include "a.h"
void bar() {
foo();
}

预处理后与相同

//a.cpp
void foo();
void foo() {
//do something
}
//b.cpp
void foo();
void bar() {
foo();
}

因此,您可以省略头,并在需要调用它的任何地方手动声明函数。但是,头可以确保整个项目的声明都是相同的。例如,如果您更改foo以获取参数:

//a.h
void foo(int);

现在在b.cpp中,编译器将告诉您调用foo()与声明不匹配。如果你去掉了头,而是手动声明它,如果你忘记在b.cpp中更改声明,编译器会假设foo有两个版本,因为你告诉过他:

//a.cpp
void foo(int); //version 1
void foo(int i) {
//do something
}
//b.cpp
void foo(); //oops. forgot to change that. compiler assumes a second version
void bar() {
foo(); //ok, try to call version 2...
}

这将进行编译,但是链接器将告诉您一些关于void foo()的未定义引用的信息,该引用在b.obj中调用。