Я думаю, что вы имеете в виду прототип функции .
Здесь вы определяете прототип функции в заголовочном файле , но определяете реализацию в исходном (.cpp) файле .
Исходный код, который должен ссылаться на функцию, просто включает файл заголовка, который дает компилятору достаточно информации, чтобы соотнести вызов функции с аргументами и возвращаемым значением функции, которую вы вызываете.
Только на этапе связывания функция «символ» разрешается с исходным файлом - если бы функция реализации не существовала на этом этапе, вы получите неразрешенный символ.
Вот пример:
Заголовочный файл библиотеки - library.h
// This defines a prototype (or signature) of the function
void libFunction(int a);
Файл библиотечного источника (.cpp) - library.cpp
// This defines the implementation (or internals) of the function
void libFunction(int a)
{
// Function does something here...
}
Код клиента
#include "library.h"
void applicationFunction()
{
// This function call gets resolved against the symbol at the linking stage
libFunction();
}