Структура (без определения типа) часто должна (или должна) быть с ключевым словом struct при использовании.
struct A; // forward declaration
void function( struct A *a ); // using the 'incomplete' type only as pointer
Если вы напечатаете свою структуру, вы можете пропустить ключевое слово struct.
typedef struct A A; // forward declaration *and* typedef
void function( A *a );
Обратите внимание, что разрешено повторно использовать имя структуры
Попробуйте изменить предварительную декларацию на это в вашем коде:
typedef struct context context;
Возможно, было бы удобнее добавить суффикс для указания имени структуры и имени типа:
typedef struct context_s context_t;