почему бы поставить определение функции в .h тьфу? - PullRequest
0 голосов
/ 21 октября 2011

Я перефразирую один код плагина gstreamer, и я узнал в файле .h, что они написали следующую функцию типа в файле .h

static inline GstByteReader *
gst_ebml_read_br (GstEbmlRead * ebml)
{
  g_return_val_if_fail (ebml->readers, NULL);
  g_return_val_if_fail (ebml->readers->len, NULL);

  return &(g_array_index (ebml->readers,
          GstEbmlMaster, ebml->readers->len - 1).br);
}

вы можете увидеть здесь ее источник http://gstreamer.freedesktop.org/data/coverage/lcov/gst-plugins-good/gst/matroska/ebml-read.h.gcov.html

Редактировать: все функции в этих файлах являются статическими встроенными

Ответы [ 2 ]

2 голосов
/ 21 октября 2011
Компиляторы

C не обязательно способны встраивать функции во время соединения.Поэтому, если вы действительно хотите дать компилятору наилучшие шансы для включения функции, необходимо определить функцию в каждом TU, который ее использует.Так что это должно быть определено в заголовочном файле.inline позволяет программе иметь несколько определений функции в разных TU.

Кроме того, эта функция помечена static, что дает ей внутреннюю связь и означает, что у каждого TU есть своя отдельная копия функции..

1 голос
/ 21 октября 2011

Чтобы inline работал, код должен быть доступен в том месте, где он используется, поэтому он должен быть в заголовке.

...