gpt4 book ai didi

c++ - 使用 header 时,是否需要插入我的 cpp 文件中使用的每个函数?

转载 作者:行者123 更新时间:2023-11-30 03:14:58 25 4
gpt4 key购买 nike

如果使用我自己的文件:

abc.cppabc.h

假设 abc.h 包含:

//abc.h
#ifndef ABC_H
#define ABC_H

void function1 ();

#endif

假设 abc.cpp 包含:

//abc.cpp
void function1();
void function2();

void function1(){
function2();
}

void function2(){
}

如果我想通过函数 1 中的代码访问函数 2,我是否仍然绝对需要这样做:

//abc.h
#ifndef ABC_H
#define ABC_H

void function1 ();
void function2 ();

#endif

或者我可以这样离开吗:

//abc.h
#ifndef ABC_H
#define ABC_H

void function1 ();

#endif

在此先感谢您的帮助。安德鲁·B

最佳答案

C++ 中的规则是使用前声明。这意味着您必须在使用函数之前声明其存在。

  • 声明只是函数的签名,例如:int add(int, int);
  • 定义是函数的主体。定义也充当声明,因此如果之前没有声明,则定义也是声明。

这采用 3 种形式之一:

  • 你在头文件中声明一个函数,并在cpp文件中定义它
  • 一次性声明和定义一个函数
  • 函数是一个实现细节,在cpp文件中声明和定义

仅使用 cpp 文件函数

这些函数在它们定义的 cpp 文件之外是不可见的:

// foo.hpp

// Declaration
void foo();
// foo.cpp

// Definition
void do_some_stuff() {
std::cout << "Hello, world!\n";
}
// Definition
void foo() {
do_some_stuff();
}

仅 header 函数

因为 C++ 使用头文件的文本包含,您可以在头文件中定义函数,只要声明在前,它们就可以访问 cpp 文件中定义的函数:

// example.hpp

// declaration comes before usage
void printMessage(); //Defined in Cpp file

void printMessage10x() {
for(int i = 0; i < 10; i++) {
printMessage();
}
}
// example.cpp
void printMessage() {
std::cout << "Hello, world!\n";
}

之所以可行,是因为 printMessage 的声明出现在头文件的较早位置,因此它对编译器可见。

在头文件中声明函数有什么用?

可以内联头文件中声明的函数,而无需求助于链接时优化。此外,在考虑是否内联函数时,编译器可以获得更多信息。

此外,模板化类和函数在头文件中声明时最易于使用。 See this question for more information.

// min.hpp

// Calculates the minimum of two numbers of any type
template<class T>
T min(T a, T b) {
if(a < b)
return a;
else
return b;
}

关于c++ - 使用 header 时,是否需要插入我的 cpp 文件中使用的每个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57382508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com