是否可以调用 a.cpp 中定义的函数以在 b.cpp 中使用,而无需在任何头文件中声明 a.cpp 中的函数。
最佳答案
是的,虽然不推荐。
包含 header 的实际作用是有效地将 header 的内容放入源代码中预处理器找到 #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();
}
因此您可以省略标题并在需要调用它的任何地方手动声明该函数。然而, header 确保声明在整个项目中都是相同的。例如。如果您更改 foo
以获取参数:
//a.h
void foo(int);
现在在 b.cpp
中,编译器会告诉您调用 foo()
与声明不匹配。如果您省略 header 并手动声明它,如果您忘记更改 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()
的 undefined reference ,在 b.obj
中调用。
关于c++ - 在其他源文件中没有公共(public)头文件访问功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22034516/