>>217696
Несбалансированные скобочки смертный грех, увы. Пока у меня так:
#define fun( C_Type, Name ) static C_Type MY( ERROR_Result ); C_Type Name fun_ARGS
#define fun_ARGS(...) (__VA_ARGS__) { \
typeof( MY( ERROR_Result ) ) ERROR_Result; memset( (void*) &ERROR_Result, 0, sizeof( ERROR_Result ) ); \
fun_BODY
#define fun_BODY(...) \
{__VA_ARGS__} \
}
Нужно будет еще подумать что делать если функция возвращает void. Макросы для работы с ошибками в применении выглядят примерно так:
let F = OK( Open_Frobnicator() );
let Frob_Count = TRY( Frobnicate( F ) );
OK( Frob_Count <= 19, "Too many frobs" ); NO( Frob_Count < 5, "Too few frobs" );
FIXME_OK( Frob_Count <= 10, "Can't handle more than 10 frobs yet" );
DIE( "Все, заебался!" );
DIE(); //REALITY COMPROMISED
Допилю еще немного и попробую поспрашивать публичных экспертов по си-пердолу. Сомневаюсь что предложат что-то лучше, но хз, я ж не сорок лет упарываю си, может я что-то упускаю из вида.
>>217697
>раст юзай, там есть дженерики нормальные
У меня серьезные сомнения что в расте хоть что-то нормальное. Это как wayland vs xorg, нам обещали что ошибки xorg будут учтены, но как известно что-то пошло не так. То же и с rust vs c++. Хотя говорят что вейленд уже допилили до чего-то вменяемого, не проверял.
>скалу, заодно уважаем будешь.
Заодно можно будет чаек попить пока реконпиляция. Или они уже это поправили.
>>217698
Собственный конпелятор они как раз пишут, чтоб выкинуть LLVM. Вот я и жду когда это произойдет. Тогда и посмотрю внимательнее что за зверь. Собственно на таких затыках си и держиться до сих пор. Для меня важной задачей является бутстраппинг, не хочу зависить от си вообще, но пока лучше уж поебусь с GCC, чем конпелять LLVM (весьма нетривиально) и затем еще фронтенд для языка.