Существует способ сделать что-то, что технически не совсем то, о чем вы просите, но должно служить той же цели - сохранить непрозрачность вашей структуры при поддержке распределения без кучи.
в api.h указывается непрозрачная структура следующим образом:
struct trytag_opaque
{
char data[sizeof(int)*2];
};
если вы хотите быть более непрозрачным, вы можете рассчитать максимальный размер структуры, требуемый для любой поддерживаемой платформы, и использовать:
struct trytag_opaque
{
char data[MAX_TRYTAG_SIZE];
};
Тогда ваши объявления функций api.h будут выглядеть так:
int try_a(struct trytag_opaque *t)
и ваш код функции будет выглядеть так:
int try_a(struct trytag_opaque *t_opaque) {
trytag *t = (trytag *)t_opaque;
...
}
и ваш main.c будет выглядеть так:
#include "api.h"
int main() {
struct trytag_opaque t;
...
try_a(&t);
...
}