Внутри библиотек такие вещи себе позволять не нужно. У вас есть 2 варианта как правило: бросить исключение, или вернуть код ошибки. В противном случае ведь что, представьте что вашу либу используют например в операциооной системе. Ей в результате ошибки дали неправильные числа, и при этом ваша либа убивает все приложение целиком! В то время как стоило бросить исключение, а пользовательский код уже разобрался бы что делать.

Короче говоря, printf и exit нужно перенести обратно в сэмпл, а вместо них здесь оставить например выброс исключения.