В C ++ волшебное слово, которое вы ищете, это «исключение». Это дает вам способ сообщить вызывающему абоненту, что что-то пошло не так. Вы получите код типа
int
doStuff(unsigned char * inSomeData, int inDataLength) throws Exception {
// do a test
if(inDataLength == 0)
throw new Exception("Length can't be 0");
// only gets here if it passed the test
// do other good stuff
return theResult;
}
Теперь в вашем конкретном примере есть еще одна проблема, потому что в C или C ++ нет универсального способа определить, насколько длинным является массив примитивов. Это всего лишь биты, с inSomeData
адресом первых бит. Строки являются особым случаем, потому что существует общее соглашение, что нулевой байт заканчивает строку, но вы не можете зависеть от этого для двоичных данных - нулевой байт - это просто нулевой байт.
Обновление
В настоящее время это подняло некоторые отрицательные отзывы, по-видимому, от людей, введенных в заблуждение комментарием о том, что спецификации исключений устарели. Как я заметил в комментарии ниже, на самом деле это не так - хотя спецификация в C ++ 11 будет устаревшей , сейчас она все еще является частью языка, поэтому, если спрашивающий не пишет путник времени в 2014 году предложение throws по-прежнему является правильным способом написания его на C ++.
Также обратите внимание, что первоначальный спрашивающий говорит: «Я хочу сделать так, чтобы пользователь знал, что произошло, если он / она введет [sic] недействительные данные и произойдет сбой библиотеки». Таким образом, вопрос заключается не только в том, что я могу сделать, чтобы проверить входные данные (ответ: не так много, если вы не знаете больше о входных данных, чем было заявлено), а в том, как мне сказать вызывающему абоненту, что он облажался? И ответом на это является «использовать механизм исключений», который, безусловно, не устарел.