C++ 内联函数的前向声明
我有一个头文件,它将包含大量(30+)内联函数 与其让读者滚动或搜索内联函数的定义(实现),我希望有一个前向声明部分,用描述函数的注释来声明函数声明。本节将允许读者了解如何使用函数或查找函数,而无需向下滚动到实现 此外,我希望读者养成使用函数的习惯,而不必看到它们的实现 独立函数的正向声明的语法是什么 {这适用于C99和C++} 仅供参考,我正在使用IAR Workbench C编译器集来使用C99。您不需要“前向声明”它(这一术语通常只适用于类型,因为我们通常在第一次声明它们的同一位置定义它们) 只需像平常一样声明:C++ 内联函数的前向声明,c++,c,inline,c99,forward-declaration,C++,C,Inline,C99,Forward Declaration,我有一个头文件,它将包含大量(30+)内联函数 与其让读者滚动或搜索内联函数的定义(实现),我希望有一个前向声明部分,用描述函数的注释来声明函数声明。本节将允许读者了解如何使用函数或查找函数,而无需向下滚动到实现 此外,我希望读者养成使用函数的习惯,而不必看到它们的实现 独立函数的正向声明的语法是什么 {这适用于C99和C++} 仅供参考,我正在使用IAR Workbench C编译器集来使用C99。您不需要“前向声明”它(这一术语通常只适用于类型,因为我们通常在第一次声明它们的同一位置定义它们
#include <iostream>
void foo(); // Declaration
inline void foo() { // Defining declaration
std::cout << "!";
}
// ---------------------------------------------
int main() {
foo(); // Output: foo()
}
#包括
void foo();//宣言
内联void foo(){//定义声明
std::cout与非内联函数没有区别:
void func(); // "forward" declaration
// ...
inline void func() // definition
{
// impl
}
通常,用于向库使用者“隐藏”定义的模式是将声明放在一个标题(a.h
)中,并将定义放在第二个标题(a_def.h
)中,然后将前者#包含
后者(为简洁起见,省略包含保护):
库消费者会简单地#包括也许我的问题不清楚,对内联函数使用前向声明有什么问题吗?@ThomasMatthews:你问的是语法。但我的回答也已经涵盖了你的新问题。而且,正如它所说的,不要称之为“前向声明”在C++中实际上没有术语“向前声明”,它只是“声明”。@ KeRekSB:标准章节的标题:代码> 27.3 < /代码>不同意你(以及与你错误评论的人)。为了挽救你的查找,它被称为“向前声明”。,并列出了iostreams
中的转发声明。希望能有所帮助。@KerrekSB:还有9.1/2
:“[…]仅由类键标识符组成的声明;是当前作用域中名称的重新声明或标识符作为类名的转发声明。它将类名引入当前作用域。[..]这是规范性的。如果定义仅在一个文件之外,那么它们是如何隐藏的?如果在声明下面的同一个文件中有定义,会有什么区别吗?@Fabian:“隐藏”这是不正确的。对于C++来说,这是不正确的。对于一个内联定义,使用非内联声明将在每个翻译单元中发出一个外部可见的符号,其中包含头,导致链接失败,并出现重复的符号错误。(这就是为什么在一个问题上标注多种语言是愚蠢的。)
// a.h
void func();
#include "a_def.h"
// a_def.h
inline void func()
{
// impl
}