Давайте по порядку.
В представленном примере у нас реализация функции, которая не принимает параметров и возвращает указатель на структуру android_app
struct android_app *
- это возвращаемый функцией тип;
GetAndroidApp - имя функции;
Конструкция
(void)
после имени означает, что функция без аргументов, современные компиляторы позволяют писать просто пустые скобки
()
;
В фигурных скобках пишут тело функции, то есть ее реализацию.
Компиляторы C читают код сверху вниз, использовать можно только то, что объявлено выше. Кроме того некоторые сущности вообще могут компилироваться отдельно и уже после линковаться в 1 исполняемый файл.
Для этого язык C поддерживает декларации сущностей без их реализации, при условии, что сущность будет реализована ниже или где-то еще, что прилинкуется на сборке.
Для функций декларацией (так же говорят заголовком) является описание ее сигнатуры, то есть для GetAndroidApp таким заголовком будет:
// описание структуры android_app должно быть выше заголовка его использующего,
// иначе он будет невалидным. А вот описание полей (реализация) может быть и ниже
struct android_app;
struct android_app* GetAndroidApp();
комментарии говорится что я могу добавить его в Header
Это значит, что данные сигнатуры можно вынести в заголовочный файл (тот что с расширением .h), это позволит вставить его во множество исходников через директиву препроцессора #include