Мощность языка СИ во многом определяется легкостью и гибкостью в определении и использовании функций в СИ-программах. В отличие от других языков программирования высокого уровня в языке СИ нет деления на процедуры, подпрограммы и функции, здесь вся программа строится только из функций.
Функция - это совокупность объявлений и операторов, обычно предназначенная для решения определенной задачи. Каждая функция должна иметь имя, которое используется для ее объявления, определения и вызова. В любой программе на СИ должна быть функция с именем main (главная функция), именно с этой функции, в каком бы месте программы она не находилась, начинается выполнение программы.
Реализация программы как набора функций хороша с точки зрения разработки программного обеспечения, но вызовы функции приводят к накладным расходам во время выполнения. В С++ для снижения этих накладных расходов на вызовы функции - особенно небольших функций - предусмотрены встраиваемые (inline) функции.
Спецификация inline перед указанием типа результата в объявлении функции "советует" компилятору сгенерировать копию кода функции в соответствующем месте, чтобы избежать вызова этой функции. В результате получается множество копий кода функции, встраиваемых в программу, вместо единой копии, которой передается управление при каждом вызове функции. Компилятор может игнорировать спецификацию inline и обычно так и делает для всех функций, кроме самых малых.
Пример программы, использующей встроенную функцию cube для расчета величины куба со стороной s. Ключевое слово const в списке параметров функции cube говорит компилятору о том, что функция не изменяет параметр s.
Код программы:
Результат программы:
При хорошем использовании inline-функции резко повышают скорость выполнения и уменьшают размер объектного кода. Однако, inline-функции запутывают описания и могут замедлить компиляцию, поэтому,если они не необходимы, то их желательно избегать. Чтобы inline- функция давала существенный выигрыш по сравнению с обычной функцией, она должна быть очень маленькой.