C++ 内联函数的前向声明

C++ 内联函数的前向声明,c++,c,inline,c99,forward-declaration,C++,C,Inline,C99,Forward Declaration,我有一个头文件,它将包含大量(30+)内联函数 与其让读者滚动或搜索内联函数的定义(实现),我希望有一个前向声明部分,用描述函数的注释来声明函数声明。本节将允许读者了解如何使用函数或查找函数,而无需向下滚动到实现 此外,我希望读者养成使用函数的习惯,而不必看到它们的实现 独立函数的正向声明的语法是什么 {这适用于C99和C++} 仅供参考,我正在使用IAR Workbench C编译器集来使用C99。您不需要“前向声明”它(这一术语通常只适用于类型,因为我们通常在第一次声明它们的同一位置定义它们

我有一个头文件,它将包含大量(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
}