C: стоит ли встроенное ключевое слово? - PullRequest
8 голосов
/ 06 сентября 2010

Стоит ли использовать ключевое слово inline или компилятор достаточно умен, чтобы знать, когда ему нужно встроить функцию?

Ответы [ 4 ]

15 голосов
/ 06 сентября 2010

Да, он достаточно умен.Но что за последние 40 лет не достигло никакого прогресса, так это то, как создаются программы на Си.Это все еще один файл исходного кода за раз.

Таким образом, чтобы получить функцию, встроенную в более чем один файл .c, поместите определение функции в файл .h.И если вы не отметите их как встроенные, компоновщик будет жаловаться на множественные определения.

9 голосов
/ 06 сентября 2010

Компилятор довольно умен и имеет несколько метрик, чтобы выяснить, стоит ли что-то вкладывать.Но иногда, однако, разработчик будет знать о том, как приложение будет запущено, и будет знать, как встроить то, что компилятор не делает автоматически.Тем не менее, я бы никогда не включил что-то вручную, если бы не сделал несколько тестов и не обнаружил, что inline улучшит мою производительность.

Вы можете прочитать больше о том, как GCC использует inline .

3 голосов
/ 06 сентября 2010

Всегда стоит четко указать намерение.

Стоит также отметить, что компилятору даже не нужно вставлять строку, если он считает, что лучше не слишком.

0 голосов
/ 21 января 2011

Стандарт гласит:

7.1.2 Спецификаторы функций

2.Объявление функции (8.3.5, 9.3, 11.4) со встроенным спецификатором объявляет встроенную функцию.Встроенный спецификатор указывает реализации, что внутренняя замена тела функции в точке вызова должна быть предпочтительнее обычного механизма вызова функции.Реализация не требуется для выполнения этой внутренней замены в точке вызова;однако, даже если эта встроенная подстановка опущена, другие правила для встроенных функций, определенные в 7.1.2, все равно должны соблюдаться.

Так что я бы сравнил inline с <br /> в HTML- хорошая практика - постоянно использовать самозакрывающийся <br />.Но можно утверждать, что почти все браузерные реализации обрабатывают <br> и <br /> точно так же, что IMO упускает из виду.

Как отмечали другие, это, вероятно, не очень актуальнодля производительности в эти дни.Но я думаю, что он все еще служит ключевым словом для передачи смысла.

...