c++ - 在其他源文件中没有公共(public)头文件访问功能

标签 c++

是否可以调用 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/

相关文章:

c++ - 未显示最终工具栏项目图标

c++ - windows 无法找到 dll,即使它位于 PATH 中的目录中

c++ - 检查 std::string 是否只有空格的有效方法

c++ - 将多个值写入二进制文件

c++ - 我在使用 GetFullPathName 时遇到错误

c++ - 一个字符串的 Cout 给出了一个错误并且很难有一些洞察力帮助吗?

c++ - 释放内存,Windows 已触发断点

c++ - 在 CppUnit 下运行的测试产生的段错误

c++ - -1u 是有效的 C++ 吗?

c++ - 如何拥有对常量的引用但能够更改引用指向的内容?